Jupyter Notebookによるデータ分析の実践
Jupyter Notebookを活用した探索的データ分析の手法とStreamlitダッシュボードへの移行方法を学習する
前の章では、Streamlit による実践的なダッシュボード開発の方法について学びました。この章では、ダッシュボード構築と合わせて必要になる実際のデータ分析に取り組みます。
以下の知識があると、より深く理解できます。
- 第 2 章で GitHub Codespaces 環境を構築済み
- Python の基本構文(変数、関数、if 文、for 文)を理解している
- pandas の基本操作(df.head()、df.info()など)を知っている
- Excel または BI ツールでのデータ分析経験がある
なぜ BI に探索的データ分析が重要なのか
探索的データ分析(EDA)は「仮定を行う前にデータを確認する」ことを目的とし、データ品質問題の事前発見、表面的数字の背後にある構造把握、ビジネスに影響する重要な変化の検知、予想外の相関関係やトレンドの特定を可能にします。
例えば、EC サイトで特定商品カテゴリの売上急落原因が配送遅延にあることを発見したり、顧客離反率の高い地域の共通特徴を特定したり、季節性要因を除去した真の成長トレンドを把握して正確な予算策定を実現したりできます。
従来の BI ツールの限界
しかし、従来の BI ツールは探索的分析に根本的な制約があります。事前定義された分析フローに沿った動作で「もしこうだったら?」という柔軟な仮説検証が困難であり、相関分析や回帰分析といった高度な統計手法の利用が制限され、複雑なデータクリーニングやカスタム分析ロジックの実装ができません。
また、新しい分析を試すたびにダッシュボードの再設計が必要で、気づきから検証までのサイクルが遅いという問題もあります。
Python が切り開く新しい可能性
ここで重要なのは、Streamlit でダッシュボードを作成する Python が、本格的なデータ分析を実行するプロの分析者が使う道具でもあるということです。pandas でのデータ操作から scikit-learn での機械学習、statsmodels での統計モデリング、matplotlib/seaborn/plotly での高度な可視化、そして Jupyter Notebook でのインタラクティブな分析環境まで、強力なツールが揃っています。
つまり、同じ技術スタックで探索的データ分析から運用まで一貫したワークフローを実現できるのです。
この章で学ぶワークフロー
この章では、以下の 4 段階のワークフローを実践します:
- 探索段階: Jupyter Notebook でのデータ探索とインサイト発見
- 検証段階: 統計的手法による仮説検証
- 可視化段階: 価値あるインサイトの Streamlit での対話的可視化
- 運用段階: 継続的モニタリングと新たな気づきの循環
このアプローチにより、「なんとなく作ったダッシュボード」ではなく、真にビジネス価値を生み出すデータ分析基盤を構築していきます。
データ分析における適切なツール選択
前セクションで説明したように、価値のある BI ダッシュボードを作るには探索的な分析が不可欠です。しかし、ここで重要な判断があります。データ分析に何を使うべきかということです。Excel か Python か、Jupyter か Streamlit か。
データ分析の世界では「適切なツールを適切な場面で使う」ことが重要です。それぞれのツールには明確な得意分野があり、目的に応じて使い分けることで効率的な分析が可能になります。
ツール選択の戦略:探索的分析能力重視
ただし、Streamlit では AI 機能をアプリケーションに組み込むことにより、インタラクティブなデータ分析機能を活用することも可能です。その方法については、8章・9章で紹介します。
Excel ユーザー向け移行マップ
Excelでよく使う操作を、Pythonでも行うことができます。以下に一例を示します。
使い分けの基準
- Excel: 1 万行以下、基本集計、非エンジニア間の迅速共有
- Jupyter: 探索的分析、仮説検証、機械学習実験、プロセス文書化
- Streamlit: 分析結果共有、リアルタイムダッシュボード、プロトタイプ開発
推奨 4 段階ワークフロー
Stage 1: 探索(Jupyter) → データ全体像把握と仮説生成
Stage 2: 検証(Jupyter) → 統計的手法による仮説検証
Stage 3: 可視化(Streamlit) → インサイトの対話的ダッシュボード化
Stage 4: 運用(継続サイクル) → モニタリングと新発見の循環
このアプローチで、「なんとなく作ったダッシュボード」ではなく、真にビジネス価値を生み出すデータ分析基盤を構築できます。
Jupyter での探索的データ分析(EDA)
探索的データ分析は、データの理解を深め、隠れたパターンや異常値を発見する重要なプロセスです。Jupyter Notebook は、この段階で最も力を発揮するツールです。
なぜ Jupyter が探索的分析に適しているのか
Jupyter Notebook には探索的分析に適した独特の特徴があります:
インタラクティブな実行環境 セル単位でコードを実行できるため、一つずつ結果を確認しながら分析を進められます。これは「データと対話する」という探索的分析の本質に合致しています。
即座の可視化 グラフや表がコードの直下に表示されるため、分析の流れを視覚的に追跡できます。この機能により、パターンの発見や異常値の特定が格段に容易になります。
文書化機能 マークダウンセルを使って分析の思考プロセスを記録できます。これにより、後から見返したときや他のメンバーと共有するときに、なぜその分析を行ったのかが明確になります。
推奨実行環境:GitHub Codespaces + VSCode + GitHub Copilot
第 2 章で紹介した GitHub Codespaces は、Jupyter Notebook の実行環境としても最適です。VSCode の Jupyter 統合機能により、ブラウザ上で本格的なデータ分析環境を構築できます。
GitHub Codespaces + Jupyter の利点
- 環境構築の煩雑さを回避:ローカル環境での Python、Jupyter、データ分析ライブラリの複雑なセットアップが不要
- OS 非依存の統一環境:Windows、macOS、Linux の違いを気にせず、同じ環境で分析可能
- VSCode の強力な機能:シンタックスハイライト、インテリセンス、デバッグ機能を活用
- GitHub Copilot の統合:Jupyter セル内でのリアルタイムコード補完と分析手法提案
- 即座の共有:チームメンバーとの分析結果共有が簡単
- リソースの柔軟性:大容量データ分析時にマシンスペックを動的に調整可能
GitHub Copilot が Jupyter 分析で特に優れている理由
- コンテキストを理解したコード補完:既存のセルの分析内容を理解して、次に必要な分析コードを提案
- 統計手法の自動提案:データの特性に応じて適切な可視化や統計分析手法を推奨
- ライブラリ使用法の支援:pandas, matplotlib, seaborn 等の複雑な関数を自動で補完
- エラー修正の支援:よくあるデータ分析エラーの修正コードを即座に提案
実践ケーススタディ:従業員離職分析の探索的データ分析
実際のデータを使って Jupyter でのデータ分析の全工程を体験してみましょう。この章では、IBM Employee Attrition データを使って、HR 分析の段階的な分析プロセスを学習します。
このサンプルには、以下の実践的要素が含まれています:
- データ読み込みから可視化まで: 一連の分析フローを完全に体験
- 実際のデータの"汚さ": 欠損値や異常値を含む現実的なデータ
- 段階的な分析手法: 基本統計から高度な分析への発展的学習
- 再現可能な分析: 同じ環境で何度でも実行可能
サンプルデータセットについて
- データセット: IBM Employee Attrition & Performance(従業員離職分析データ)
- 特徴: 35 列、1,470 行の従業員データ(年齢、職種、給与、満足度、離職状況を含む)
- 学習目標: 探索的データ分析の基本フローを実践的に習得
サンプルノートブックの詳細ガイド
データ読み込みと基本情報確認
- 結果: 1,470 行 ×35 列の従業員データ
- 年齢、部署、給与、満足度、離職状況などの HR 重要指標を含む
データ構造の詳細確認
df.head()
df.info()
- 従業員の基本属性、職務情報、満足度評価を確認
- 欠損値なしの完全なデータセット(1,470 行すべて)
- カテゴリ変数(部署、性別)と数値変数(年齢、給与)の混在
段階的な離職要因分析
可視化結果の例:
機械学習による予測モデル構築
- 離職予測モデルの構築
- 重要な特徴量の特定と可視化
Jupyter Notebook による探索的分析のベストプラクティス
効果的なノートブック構成
Jupyter Notebook を最大限活用するには、適切な構成が重要です。
1. 明確なセクション分け
# データ分析レポート: 売上データの探索的分析
## 1. データ概要
## 2. データクリーニング
## 3. 単変量分析
## 4. 多変量分析
## 5. 仮説検証
## 6. 結論と次ステップ
2. 分析の意図を明記
### なぜこの分析を行うのか
例:顧客の購買パターンを理解し、売上予測モデルの特徴量を特定するため。
特に季節性と顧客セグメント別の行動差異に注目する。
3. 結果の解釈を記録
### 発見事項
例:
- 売上に明確な季節性があり、12 月が最高ピーク
- 高価格帯商品は特定の顧客セグメントに集中
- 欠損値は主に新規顧客データに発生
AI を活用した効率的な分析ワークフロー
現在、AI(ChatGPT や Claude)を活用することで、データ分析の効率は劇的に向上しています。これらのツールを適切に活用することで、コード生成からデバッグ、さらには分析の方向性提案まで幅広いサポートを受けられます。
AI 活用の具体的シーン
1. データ前処理のコード生成
プロンプト例:
「売上データで以下の前処理を行うPythonコードを生成してください:
- 欠損値をforward fillで補完
- 異常値(Q1-1.5*IQR未満、Q3+1.5*IQR超過)を除去
- 日付カラムをdatetimeに変換」
統計用語の平易な説明
- Q1、Q3: データを 4 等分した時の 25%点、75%点(Excel の四分位数)
- IQR: データのばらつきを示す指標(Q3-Q1)
- forward fill: 欠損値を直前の値で埋める手法
2. 可視化コードの自動生成
プロンプト例:
「月別売上の推移を示す線グラフをmatplotlibで作成してください。
グラフには以下を含めてください:
- 年ごとに色分け
- 季節性を強調するために背景を四半期ごとに色分け
- 平均線の追加」
3. 統計分析手法の提案
プロンプト例:
「顧客の購買行動を年齢、性別、地域で分析したいです。
どのような統計手法が適切か提案し、Pythonでの実装コードも教えてください。」
分析結果の共有と Streamlit への移行
Jupyter での分析が完了したら、その結果を他のメンバーと共有し、継続的に活用できる形にする必要があります。ここで Streamlit が力を発揮します。
移行の基本的な考え方
Jupyter から Streamlit への移行は、「静的な分析レポート」から「動的なインタラクティブダッシュボード」への転換です。
静的分析(Jupyter)の特徴
- 特定の時点でのデータスナップショット
- 分析者の視点での深い洞察
- 一方向的な情報提供
動的ダッシュボード(Streamlit)の特徴
- リアルタイムまたは定期更新データ
- ユーザーが自由に操作可能
- インタラクティブな探索機能
サンプルノートブックから Streamlit アプリへの移行
サンプルノートブック(example.ipynb
)で得られた分析結果を、実用的な Streamlit ダッシュボードに変換する方法を学習します:
具体的な移行例:従業員離職分析ダッシュボード
example.ipynb
の静的分析をインタラクティブな Streamlit アプリに変換:
例として content/06_DATA_ANALYSIS/example-notebook/dashboard.py
をご覧ください。
実践的な移行ワークフロー
1. 重要な洞察の特定
Jupyter 分析から、最も価値の高い洞察を特定します。
- どの分析結果が意思決定に最も影響するか
- どの可視化が最も説得力があるか
- ユーザーがインタラクトしたい要素は何か
2. インタラクティブ要素の設計
静的な分析をインタラクティブに変換します:
Jupyter(静的):
# 特定期間の売上分析
filtered_data = df[df['date'].between('2023-01-01', '2023-12-31')]
plt.plot(filtered_data.groupby('month')['sales'].sum())
Streamlit(インタラクティブ):
# ユーザーが期間を選択可能
start_date = st.date_input("開始日")
end_date = st.date_input("終了日")
filtered_data = df[df['date'].between(start_date, end_date)]
st.line_chart(filtered_data.groupby('month')['sales'].sum())
コードの変換には、Claude Code, Github Copilot Agent などノートブックファイルを閲覧できる AI コーディングエージェントを利用できます。
AI への指示の例
example.ipynbで実施した分析内容をもとに、年齢層別離職率分析および月収と離職率の関係を閲覧できるStreamlitのダッシュボードアプリを構築してください
example.ipynbで構築した離職率予測モデルを利用した予測機能をStreamlitのダッシュボードアプリに実装してください。可視化とは別のタブで動作するようにしてください
3. パフォーマンス最適化
Streamlit アプリケーションでは、キャッシュ機能を活用してパフォーマンスを最適化します:
@st.cache_data
def load_and_process_data():
"""データの読み込みと前処理(重い処理をキャッシュ)"""
df = pd.read_csv('large_dataset.csv')
return process_data(df)
@st.cache_data
def generate_analysis(df, parameters):
"""分析結果の生成(計算結果をキャッシュ)"""
return complex_analysis(df, parameters)
コード再利用の最適化
Jupyter で開発した分析ロジックを、Streamlit で効率的に再利用する方法:
1. 分析関数の共通化
# analysis_utils.py(共通モジュール)
def calculate_sales_metrics(df, segment=None):
"""売上メトリクスの計算"""
if segment:
df = df[df['segment'] == segment]
return {
'total_sales': df['sales'].sum(),
'avg_sales': df['sales'].mean(),
'sales_growth': calculate_growth(df)
}
# JupyterでもStreamlitでも同じ関数を使用
metrics = calculate_sales_metrics(df, segment='Premium')
2. 設定管理の統一
# config.py
ANALYSIS_CONFIG = {
'date_range': ['2023-01-01', '2023-12-31'],
'key_metrics': ['sales', 'profit', 'customer_count'],
'segments': ['Premium', 'Standard', 'Basic']
}
まとめ:効果的なデータ分析ワークフロー
この章では、データ分析におけるツール選択から実践的な分析手法、そして結果の共有まで一連のワークフローを学びました。
重要なポイント
-
適材適所のツール選択: Excel、Jupyter、Streamlit それぞれの特徴を理解し、目的に応じて使い分ける
-
Jupyter での効果的な EDA: 自動化ツールとマニュアル分析を組み合わせ、データの理解を深める
-
AI 活用による効率化: ChatGPT や Claude を適切に活用し、コード生成から分析方向性の提案まで幅広くサポートを受ける
-
段階的な移行戦略: Jupyter での洞察を Streamlit でインタラクティブに再現し、継続的な価値創出を実現
次のステップ
各セクションで学んだスキルを組み合わせて、実際のプロジェクトに応用しましょう:
Jupyter での基本的な EDA を習得したら
- 自分のデータで同様の分析を試す
- AI 支援を活用して分析を効率化する
- 得られた洞察を Streamlit ダッシュボードで共有する
高度な分析手法をマスターしたら
- 統計的検定による仮説検証を実践
- 機械学習手法でパターン発見に挑戦
- 時系列分析で将来予測を実施
次章プレビュー:発見した洞察を魅力的に伝える
この章で習得したスキルを基に、次章では真に説得力のあるデータプレゼンテーションを学びます。