# 2026年版 データアナリティクス面接質問トップ25 > 2026年のデータアナリティクス面接対策ガイド。SQL、Python、Power BI、統計、行動面接の頻出質問25問をコード例付きで徹底解説します。 - Published: 2026-04-08 - Updated: 2026-04-08 - Author: SharpSkill - Tags: data-analytics, interview, sql, python, power-bi - Reading time: 12 min --- 2026年のデータアナリティクス面接では、SQLの構文やグラフ作成の知識だけでは通用しません。採用チームは、混沌としたデータセットから意味を抽出し、技術に詳しくないステークホルダーに分析結果を伝え、すべての指標をビジネス成果に結びつける能力を評価します。本ガイドでは、ジュニアからシニアまで幅広いデータアナリスト職の面接で最も頻繁に出題される25の質問を取り上げます。 > **本ガイドの使い方** > > 各質問には簡潔なモデル回答と、必要に応じて実行可能なSQLまたはPythonコードが含まれています。解答を読む前に、まず自力でクエリを書く練習をしてください。面接官は暗記した回答よりも思考プロセスを重視します。 ## データアナリスト面接のSQL質問 SQLは、データアナリティクス面接で最も多くテストされるスキルです。リレーショナルデータベースを使用するすべての企業が、アナリストに自力でクエリを書く能力を求めています。 ### 1. WHEREとHAVINGの違いを説明してください `WHERE`は集計前に行をフィルタリングします。`HAVING`は集計後にグループをフィルタリングします。この2つを混同することは、技術面接で最もよく見られるミスの一つです。 ```sql -- monthly_revenue.sql SELECT DATE_TRUNC('month', order_date) AS month, SUM(amount) AS revenue FROM orders WHERE status = 'completed' -- row-level filter GROUP BY month HAVING SUM(amount) > 10000; -- group-level filter ``` `WHERE`はデータベースエンジンが`GROUP BY`を実行する前にデータセットを縮小します。`HAVING`は集計結果に対して作用します。可能な限り`WHERE`を使用することで、実行プランの早い段階でワーキングセットを小さくできるため、クエリパフォーマンスが向上します。 ### 2. ウィンドウ関数を実例で説明してください ウィンドウ関数は、結果セットを折りたたむことなく、現在の行に関連する行のセットにわたって値を計算します。ランキング、累計、期間比較に不可欠な機能です。 ```sql -- user_ranking.sql SELECT user_id, purchase_date, amount, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY purchase_date) AS purchase_rank, SUM(amount) OVER (PARTITION BY user_id ORDER BY purchase_date) AS running_total, LAG(amount) OVER (PARTITION BY user_id ORDER BY purchase_date) AS prev_amount FROM purchases; ``` `ROW_NUMBER`はユーザーごとに連番のランクを割り当てます。`SUM(...) OVER(...)`はセルフジョインなしで累計を計算します。`LAG`は前の行の値を取得し、直接比較を可能にします。面接官は、まさにこのパターンを使って月次成長率を計算するよう求めることがよくあります。 ### 3. 重複レコードの特定と削除方法を説明してください 重複検出は、イベントログ、CRMエクスポート、サードパーティデータフィードを扱うアナリストにとって日常的な作業です。 ```sql -- deduplicate_events.sql WITH ranked AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY user_id, event_type, DATE_TRUNC('minute', created_at) ORDER BY created_at ) AS rn FROM events ) SELECT * FROM ranked WHERE rn = 1; ``` CTEは各重複グループ内で行番号を割り当てます。`rn = 1`のみを保持することで、最初の出現を返します。このアプローチは元のデータを保持しながらノイズをフィルタリングします。 ### 4. 週次コホートごとのリテンションを計算するクエリを書いてください コホートリテンションは、プロダクトチームやグロースチームで最も要求される分析の一つです。SQLパターンはすべてのデータベースで一貫した構造に従います。 ```sql -- weekly_cohort_retention.sql WITH cohorts AS ( SELECT user_id, DATE_TRUNC('week', MIN(event_date)) AS cohort_week FROM user_events GROUP BY user_id ), activity AS ( SELECT c.cohort_week, DATE_TRUNC('week', e.event_date) AS active_week, COUNT(DISTINCT e.user_id) AS active_users FROM user_events e JOIN cohorts c ON c.user_id = e.user_id GROUP BY c.cohort_week, DATE_TRUNC('week', e.event_date) ) SELECT cohort_week, EXTRACT(WEEK FROM active_week - cohort_week) AS weeks_since_signup, active_users FROM activity ORDER BY cohort_week, weeks_since_signup; ``` 最初のCTEは各ユーザーの登録週を特定します。2番目のCTEはコホートごと・週ごとのユニークアクティブユーザー数をカウントします。最終クエリは結果をリテンションマトリクスに変換します。面接官は、ビジネス上の解釈を説明することを期待します。第1週目での急激な低下はオンボーディングの問題を示し、第4週目以降の横ばいは安定したコアユーザーベースの存在を示唆します。 ### 5. CTEとは何ですか?サブクエリの代わりにいつ使うべきですか? Common Table Expression(CTE)は、`WITH`で定義される名前付きの一時的な結果セットです。CTEは可読性を向上させ、再帰クエリを可能にします。サブクエリは深くネストされたSQLを生成しやすく、デバッグが困難になります。CTEは、同じ派生テーブルがクエリ内で複数回参照される場合、またはロジックに3つ以上の変換ステップがある場合に推奨されます。 ## Pythonデータ分析の面接質問 Pythonの質問は、Pandas、データクリーニングワークフロー、コードをビジネス用語で説明する能力に焦点を当てています。面接官は、学術的な抽象論ではなく、実用的なソリューションを求めています。 ### 6. Pandas DataFrameの欠損値の処理方法を説明してください 欠損データは集計やモデル入力を損ないます。アプローチはカラムの型とビジネスコンテキストによって異なります。 ```python # handle_missing.py import pandas as pd import numpy as np df = pd.read_csv('sales.csv') # Inspect the extent of missing data print(df.isnull().sum()) print(df.isnull().mean().round(3)) # percentage per column # Strategy 1: drop rows where critical columns are null df_clean = df.dropna(subset=['customer_id', 'amount']) # Strategy 2: fill numeric columns with median (robust to outliers) df['amount'] = df['amount'].fillna(df['amount'].median()) # Strategy 3: fill categorical columns with the mode df['region'] = df['region'].fillna(df['region'].mode()[0]) ``` 欠損率が5%未満でそのカラムが重要な場合は、行の削除が有効です。中央値による補完は、偏った分布に対して平均値より安全です。最頻値による補完は、支配的な値を持つカテゴリカルカラムに適しています。補完戦略を文書化することは、監査証跡のために不可欠です。 ### 7. merge、join、concatenate:それぞれの使い分け PandasにはDataFrameを結合する複数の方法があります。選択は、操作が行方向か列方向か、キーベースのマッチが必要かどうかによって決まります。 ```python # combine_dataframes.py import pandas as pd orders = pd.read_csv('orders.csv') customers = pd.read_csv('customers.csv') # Key-based merge (equivalent to SQL JOIN) result = orders.merge(customers, on='customer_id', how='left') # Stack rows from multiple sources all_events = pd.concat([events_q1, events_q2], ignore_index=True) # Add columns side-by-side (same row count required) combined = pd.concat([features, labels], axis=1) ``` `merge`はキーベースのジョインに適しています。デフォルトの`axis=0`での`concat`は行を積み重ねます。`axis=1`での`concat`はカラムを横に結合します。`how='left'`を使用すると左側のDataFrameのすべての行が保持され、SQLの`LEFT JOIN`と同等の動作になります。 ### 8. 売上データのグループ化、集計、変換 GroupBy操作はPandasにおけるSQLの`GROUP BY`に相当します。このパターンは、ほぼすべてのデータアナリストの持ち帰り課題に登場します。 ```python # sales_analysis.py import pandas as pd df = pd.read_csv('transactions.csv', parse_dates=['date']) # Monthly revenue by product category monthly = ( df.groupby([pd.Grouper(key='date', freq='M'), 'category']) .agg(revenue=('amount', 'sum'), orders=('order_id', 'nunique')) .reset_index() ) # Add a column with each category's share of total monthly revenue monthly['share'] = ( monthly.groupby('date')['revenue'] .transform(lambda x: x / x.sum()) .round(4) ) print(monthly.head(10)) ``` 名前付き集計を使った`agg`は出力の可読性を保ちます。`transform`はグループレベルの計算を各行にブロードキャストし、別途のmergeステップを不要にします。この組み合わせで、アドホックレポーティングの大部分をカバーできます。 ### 9. データセットの外れ値の検出と処理方法 外れ値検出は、極端な値がデータ入力エラーなのか、不正のシグナルなのか、それとも正当なエッジケースなのかを判断します。 ```python # detect_outliers.py import pandas as pd import numpy as np df = pd.read_csv('transactions.csv') # IQR method Q1 = df['amount'].quantile(0.25) Q3 = df['amount'].quantile(0.75) IQR = Q3 - Q1 lower = Q1 - 1.5 * IQR upper = Q3 + 1.5 * IQR outliers = df[(df['amount'] < lower) | (df['amount'] > upper)] print(f'Outliers found: {len(outliers)} ({len(outliers)/len(df)*100:.1f}%)') # Cap instead of remove (winsorization) df['amount_capped'] = df['amount'].clip(lower=lower, upper=upper) ``` IQR法は四分位範囲の1.5倍を超える値をフラグします。キャッピング(ウィンソライゼーション)は、行数を保持しながら極端な値の影響を制限します。削除は、外れ値が明らかなエラーである場合にのみ適切です。 ## 統計と確率の質問 統計リテラシーは、数字を報告するだけのデータアナリストと、それを正しく解釈するアナリストを区別します。これらの質問は基礎的な理解をテストします。 ### 10. p値を平易な言葉で説明してください p値とは、帰無仮説が正しいと仮定した場合に、測定された結果と同等かそれ以上に極端な結果が観測される確率です。p値が0.03であることは、帰無仮説が正しい確率が3%であることを意味しません。帰無仮説が正しければ、これほど極端な結果が偶然に3%の確率で発生することを意味します。閾値(アルファ)は通常0.05に設定されますが、その選択は特定のビジネスコンテキストにおける偽陽性のコストに依存します。 ### 11. 平均値ではなく中央値を使うべき場合はいつですか? 平均値は極端な値に敏感です。収入データ、取引金額、セッション時間は、中央値がより代表的な中心傾向を示す典型的な例です。少数の高額なエンタープライズ取引があるデータセットでは、平均値が一般的な顧客の経験をはるかに超えた値に押し上げられる可能性があります。中央値を平均値と並べて報告し、標準偏差を含めることで、ステークホルダーに完全な全体像を提供できます。 ### 12. 相関と因果の違いを説明してください 相関は2つの変数間の線形関係の強さと方向を測定します。因果は一方の変数が他方に直接影響を与えることを意味します。アイスクリームの売上と溺死事故は相関しますが、これは両方が夏に増加するためであり、一方が他方を引き起こしているわけではありません。因果を確立するには、対照実験(A/Bテスト)または差分の差分法や操作変数法などの厳密な因果推論フレームワークが必要です。 ### 13. 第一種過誤と第二種過誤をビジネス例で説明してください 第一種過誤(偽陽性)は、検定が帰無仮説を誤って棄却する場合に発生します。例:新しいチェックアウトフローがコンバージョンを増加させると結論づけたが、実際には効果がなく、不要なプロダクト変更につながるケースです。第二種過誤(偽陰性)は、検定が実際の効果を検出できない場合に発生します。例:テストのサンプルサイズが不十分で、実際の2%のリフトを検出できず、旧チェックアウトフローを維持してしまうケースです。サンプルサイズを増やすと第二種過誤が減少します。アルファ閾値を下げると第一種過誤は減少しますが、第二種過誤は増加します。 ## Power BIとデータ可視化の質問 可視化の質問は、候補者が適切なチャートを選択し、保守しやすいダッシュボードを構築し、技術に詳しくない聴衆にデータストーリーを伝えられるかどうかを評価します。 ### 14. DAXとは何ですか?SQLとの違いは何ですか? DAX(Data Analysis Expressions)は、Power BI、Analysis Services、Excel Power Pivotで使用される数式言語です。行のセットに対して操作するSQLとは異なり、DAXはスライサー、フィルター、行コンテキストに基づいて動的に変化するフィルターコンテキスト内で動作します。DAXの`CALCULATE`関数は、式を評価する前にフィルターコンテキストを変更しますが、これはSQLに直接対応する概念がありません。 ### 15. インポートモードとDirectQueryの違いを説明してください インポートモードはデータをPower BIのインメモリエンジン(VertiPaq)に読み込み、高速なクエリパフォーマンスを実現しますが、定期的な更新が必要です。DirectQueryはリアルタイムでソースデータベースにクエリを送信し、データの鮮度を保証しますが、ソースシステムのパフォーマンスに依存します。2026年には、Microsoft FabricがDirect Lakeモードを導入しています。これはOneLakeからParquetファイルを直接読み取り、インポートやSQLエンドポイントへのクエリなしで、インポートモードの速度とほぼリアルタイムの鮮度を両立させます。 ### 16. 棒グラフと折れ線グラフの使い分け 棒グラフは離散カテゴリを比較します(地域別売上、製品別件数)。折れ線グラフは連続的な時間軸上のトレンドを示します(日次アクティブユーザー数、月次解約率)。カテゴリデータに折れ線グラフを使用すると、関連のないカテゴリ間にトレンドがあるかのように見え、聴衆を誤導します。面接では、円グラフについてのフォローアップ質問もよくあります。円グラフは全体に対する部分を示す場合に使用し、スライスは5つ以下に限定すべきです。人間の目は角度を正確に比較するのが苦手だからです。 ### 17. 遅いPower BIレポートの最適化方法 遅いレポートは通常、データモデルの過剰なカラム、行ごとに評価される複雑なDAXメジャー、数百万行をクエリするビジュアルに起因します。最適化のチェックリストには、未使用カラムの削除によるモデルサイズの縮小、イテレータ関数(`SUMX`、`FILTER`)の可能な限りの非イテレータ版への置き換え、ページあたりのビジュアル数を15未満への削減、高カーディナリティディメンションに対する集計テーブルの使用が含まれます。Power BI Desktopに組み込まれたパフォーマンスアナライザーが、ボトルネックとなっているビジュアルやDAXクエリを正確に特定します。 ## 行動面接とケーススタディの質問 技術スキルは面接の機会を得るためのものです。行動面接の質問が、オファーを獲得できるかどうかを決定します。すべての回答はSTARフレームワーク(Situation、Task、Action、Result)に従うべきです。 ### 18. データ分析がビジネス上の意思決定を変えた経験を説明してください 強い回答には、変動した具体的な指標、使用した分析手法、金額またはパーセンテージでの影響が含まれます。弱い回答は、成果と結びつけずにダッシュボードを説明するだけです。回答例の構造:「SaaSプロダクトの解約分析により、48時間以内にオンボーディングを完了しなかったユーザーの30日解約率が60%高いことが判明しました。プロダクトチームが24時間目にトリガーされる自動メールシーケンスを追加し、30日解約率を8ポイント削減しました。」 ### 19. ステークホルダーからの相反するデータリクエストにどう対処しますか? この質問は、優先順位付けとコミュニケーション能力をテストします。推奨されるアプローチ:各リクエストの背後にあるビジネス上の質問を明確にし、共有指標を特定し、両方のニーズに対応する単一のダッシュボードを提案し、トレードオフを透明に文書化します。データガバナンスの懸念やリソースの制約に裏付けられている場合、代替案を提示した上で、ステークホルダーに「ノー」と言うことは許容されます。 ### 20. 技術に詳しくない聴衆に複雑な分析を説明してください 面接官は、回帰分析やコホート分析などの概念をマーケティングマネージャーに説明するように求めることがよくあります。最良の回答はアナロジーを使い、専門用語を避け、説明をビジネス成果に結びつけます。「コホート分析は、顧客を登録月ごとにグループ化し、3か月後にまだアクティブな人数を追跡します。このチャートは、1月登録者が2月登録者よりもリテンションが良いことを示しており、これは12月末に実施されたオンボーディング改善と一致しています。」 > **STARフレームワーク参考** > > Situation:状況を設定する。Task:目標を定義する。Action:実施した具体的なステップを説明する。Result:影響を定量化する。面接官はResult(結果)ステップを省略する曖昧な回答に対して評価を下げます。 ## データクリーニングとETLの面接質問 データ品質の問題は、アナリストの作業時間の大部分を消費します。これらの質問は、実務でのデータラングリング能力をテストします。 ### 21. ETLパイプライン実行後のデータ検証方法 検証チェックは、行数(ソースとデスティネーションの比較)、重要カラムのnull率、テーブル間の参照整合性、値分布の変化(サイレントスキーマ変更の検出)をカバーする必要があります。パイプライン実行後に毎回実行される自動チェックにより、不良データがダッシュボードに到達するのを防ぎます。 ```python # etl_validation.py import pandas as pd def validate_pipeline(source_df: pd.DataFrame, target_df: pd.DataFrame) -> dict: checks = {} # Row count match checks['row_count_match'] = len(source_df) == len(target_df) # Null rate on critical columns for col in ['user_id', 'event_date', 'amount']: null_rate = target_df[col].isnull().mean() checks[f'{col}_null_rate'] = round(null_rate, 4) # Revenue reconciliation source_total = source_df['amount'].sum() target_total = target_df['amount'].sum() checks['revenue_diff_pct'] = round( abs(source_total - target_total) / source_total * 100, 2 ) return checks results = validate_pipeline(source, target) for check, value in results.items(): print(f'{check}: {value}') ``` この関数は、アラートシステムに入力できる検証結果の辞書を返します。売上の差異が0.01%を超える場合は、調査を開始する必要があります。 ### 22. 正規化データと非正規化データの違いは何ですか? 正規化データは、関連するテーブルに情報を分割することで冗長性を最小化します(第3正規形)。非正規化データは、読み取り重視の分析クエリに最適化された、より広くフラットな構造にテーブルを結合します。OLTPシステムはデータの整合性のために正規化を好みます。データウェアハウスとBIツールは、クエリ速度のために非正規化(スタースキーマ、スノーフレークスキーマ)を好みます。このトレードオフを理解することは、効率的なデータパイプラインの設計に不可欠です。 ## 高度なアナリティクスの質問 シニアポジションでは、実験、予測、組織横断的なデータ戦略に精通していることが求められます。 ### 23. A/Bテストをゼロから設計する方法 A/Bテストには5つの要素が必要です:明確な仮説(「CTAボタンの色をグレーから緑に変更するとクリック率が5%向上する」)、主要指標(クリック率)、期待される効果サイズと望ましい検出力(通常80%)に基づくサンプルサイズ計算、コントロール群とトリートメント群へのユーザーのランダム割り当て、そして週次の季節性を考慮した事前設定されたテスト期間です。少なくとも2つの完全なビジネスサイクルにわたってテストを実施することで、曜日バイアスによる結果の歪みを防ぎます。 > **A/Bテストでよくある間違い** > > 統計的有意性に達する前に結果を確認すると、偽陽性率が膨張します。テスト開始前に、分析計画、サンプルサイズ、期間を事前登録してください。 ### 24. ファネル分析と最も重要なドロップオフポイントの説明 ファネル分析は、一連のステップ(ホームページ訪問、商品閲覧、カート追加、チェックアウト、購入など)を通じたユーザーの進行を追跡します。最もインパクトのある最適化は、最大のパーセンテージドロップではなく、最大の絶対数ドロップがあるステップをターゲットにします。商品閲覧の1,000人からカート追加の600人への40%のドロップは400人の損失です。チェックアウトの100人から購入の50人への50%のドロップはわずか50人の損失です。最初のボトルネックを優先することで、より多くの総コンバージョンが得られます。 ### 25. ステークホルダーが実際に使用するKPIダッシュボードの構築方法 ダッシュボードは、階層なしに多すぎる指標を表示すると失敗します。効果的なKPIダッシュボードは逆ピラミッドに従います:最上部に1~2つの最重要指標(月次経常収益、ネットプロモータースコアなど)、中間にサポート指標(コンバージョン率、解約率、平均注文額)、ドリルダウンでアクセス可能な診断詳細を配置します。トップレベルのビューを7つ以下の指標に制限することで、認知負荷を軽減します。自動注釈の追加(「3月5日に決済ゲートウェイの障害により売上が12%低下」)は、生の数字にはないコンテキストを提供します。 ## まとめ - SQLのウィンドウ関数、CTE、コホートクエリは、ほぼすべてのデータアナリスト技術面接に登場します。これらを記憶から書けることは基本的な期待事項です。 - Python Pandasの習熟度は、アドホック分析タスクの80%をカバーします。`merge`、`groupby`、`transform`、null処理に集中してください。 - 統計的推論(p値、相関と因果、実験設計)は、数字を報告するだけのアナリストと正しく解釈するアナリストを区別します。 - Power BIと可視化の質問は、チャートの選択、DAXの基礎、ダッシュボードのパフォーマンス最適化をテストします。 - STARフレームワークに従い定量化された結果を含む行動面接の回答は、曖昧な説明を上回ります。 - [SharpSkillでデータアナリティクスの面接モジュールを練習する](/technologies/data-analytics/interview-questions/sql-window-functions)で、タイマー付き演習としてこれらの概念を訓練できます。 - 関連する準備として、[データサイエンス面接ガイド](/blog/data-science/top-25-data-science-interview-questions-2026)がシニアデータアナリスト職と重なる機械学習と統計モデリングの質問をカバーしています。 --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/ja/blog/data-analytics/data-analytics-interview-questions-2026