Streamlit × ydata_profiling で作る！CSV/Excel対応データプロファイラー

# **user**:

初学者向けにVSCodeを使ってStreamlitアプリを作るガイドを書いてください。そのアプリは、次のような動作をします。

・ユーザにcsvファイルまたはエクセルファイルの入力を促します。
・エクセルファイルの場合は、どのシートを見たいかユーザに確認します。
・入力されたデータをydata_profilingでインタラクティブに解析できます。

# **assistant**:

以下は、**VSCodeを使ってStreamlitアプリを作る初心者向けガイド**です。アプリの目的は、「CSVまたはExcelファイルをアップロードし、必要に応じてシートを選択し、`ydata_profiling`（旧名：`pandas_profiling`）でインタラクティブにデータ分析を行う」ことです。

---

# 💻 初心者向け：VSCodeでStreamlit＋ydata_profilingアプリを作る完全ガイド

## 🎯 このガイドで作るアプリ
- ユーザーがCSVまたはExcelファイルをアップロード
- Excelの場合、シート選択が可能
- アップロードしたデータを `ydata_profiling` を使って可視化・解析

---

## 🛠️ 事前準備

### 1. VSCodeのインストール
- 公式サイト：[https://code.visualstudio.com/](https://code.visualstudio.com/)
- Python拡張機能もインストールしておくと便利です（拡張機能 → Python を検索してインストール）

### 2. Pythonのインストール
- [https://www.python.org/downloads/](https://www.python.org/downloads/) から最新版をインストールしてください
- インストール時に「Add Python to PATH」にチェック✅

### 3. 仮想環境の作成（推奨）
```bash
python -m venv env
source env/bin/activate     # macOS/Linux の場合
env\Scripts\activate        # Windows の場合
```

### 4. 必要なライブラリのインストール
```bash
pip install streamlit pandas openpyxl ydata-profiling
```

---

## 📁 プロジェクト構成（例）
```
streamlit-data-profiler/
├── app.py
└── sample.xlsx（←テスト用Excelファイルなど）
```

---

## 🧑‍💻 `app.py`のコード

```python
import streamlit as st
import pandas as pd
from ydata_profiling import ProfileReport
from streamlit.components.v1 import html

st.set_page_config(page_title="データプロファイルアプリ", layout="wide")

st.title("📊 CSV / Excel アップローダ & データプロファイラー")

uploaded_file = st.file_uploader("ファイルをアップロードしてください（CSVまたはExcel）", type=["csv", "xlsx", "xls"])

if uploaded_file:
    if uploaded_file.name.endswith(".csv"):
        df = pd.read_csv(uploaded_file)
        st.success("CSVファイルを読み込みました。")
    elif uploaded_file.name.endswith((".xlsx", ".xls")):
        excel_file = pd.ExcelFile(uploaded_file)
        sheet = st.selectbox("📑 シートを選択してください", excel_file.sheet_names)
        df = pd.read_excel(uploaded_file, sheet_name=sheet)
        st.success(f"{sheet} シートを読み込みました。")
    else:
        st.error("対応していないファイル形式です。")
        df = None

    if df is not None:
        st.subheader("🔍 データの概要")
        st.dataframe(df.head())

        st.subheader("📈 ydata_profiling による解析")
        profile = ProfileReport(df, title="データプロファイルレポート", explorative=True)
        html(profile.to_html(), height=1000, scrolling=True)
```

---

## ▶️ アプリを起動する

以下のコマンドをターミナルで実行：

```bash
streamlit run app.py
```

ブラウザが自動的に開き、アプリが起動します。

---

## 💡 補足

- `ydata_profiling`は非常に多機能ですが、大きなデータでは時間がかかることがあります。
- `openpyxl`はExcelファイルの読み込みに必要です。
- `streamlit.components.v1.html`を使って、プロファイルレポートをアプリに埋め込んで表示しています。

---

## 🧪 テスト用ファイル
自分でExcelやCSVを用意するか、以下のような簡単なCSVを用意してテストできます：

```csv
名前,年齢,職業
佐藤,34,エンジニア
鈴木,28,デザイナー
高橋,45,マネージャー
```

---

## 🚀 まとめ
このガイドでは、以下のスキルを身につけました：
- VSCodeでStreamlitアプリを作成
- CSVやExcelのファイルアップロード機能
- `ydata_profiling`を使ったデータの自動解析と可視化

---

希望があれば、次のステップとして「分析結果のPDF出力機能」や「Streamlit Cloudへのデプロイ方法」も紹介できます！やってみたいですか？

# **user**:

ありがとうございます。「分析結果のPDF出力機能」を追加してください。

# **assistant**:

どういたしまして！  
では、**「ydata_profilingの分析結果をPDFで出力できる機能」**を追加しましょう。

---

## 📝 変更点の概要

Streamlitアプリに以下の機能を追加します：

- `ydata_profiling`で作成したプロファイリングレポートをPDFとして保存
- Streamlit上からダウンロードできるようにボタンを追加

---

## 📦 必要な追加ライブラリ

`pdfkit`と`wkhtmltopdf`が必要です：

### 1. `pdfkit`のインストール（Pythonライブラリ）
```bash
pip install pdfkit
```

### 2. `wkhtmltopdf` のインストール（PDF変換エンジン）

- macOS (Homebrew):
```bash
brew install --cask wkhtmltopdf
```

- Windows:  
[https://wkhtmltopdf.org/downloads.html](https://wkhtmltopdf.org/downloads.html) からインストーラをダウンロードし、インストールパスを環境変数 `PATH` に追加します。

---

## ✏️ 修正後の `app.py`

以下のコードでは、PDF出力用に `pdfkit` を使い、Streamlitでダウンロードボタンを表示します。

```python
import streamlit as st
import pandas as pd
import pdfkit
import tempfile
from ydata_profiling import ProfileReport
from streamlit.components.v1 import html

st.set_page_config(page_title="データプロファイルアプリ", layout="wide")

st.title("📊 CSV / Excel アップローダ & データプロファイラー")

uploaded_file = st.file_uploader("ファイルをアップロードしてください（CSVまたはExcel）", type=["csv", "xlsx", "xls"])

if uploaded_file:
    if uploaded_file.name.endswith(".csv"):
        df = pd.read_csv(uploaded_file)
        st.success("CSVファイルを読み込みました。")
    elif uploaded_file.name.endswith((".xlsx", ".xls")):
        excel_file = pd.ExcelFile(uploaded_file)
        sheet = st.selectbox("📑 シートを選択してください", excel_file.sheet_names)
        df = pd.read_excel(uploaded_file, sheet_name=sheet)
        st.success(f"{sheet} シートを読み込みました。")
    else:
        st.error("対応していないファイル形式です。")
        df = None

    if df is not None:
        st.subheader("🔍 データの概要")
        st.dataframe(df.head())

        st.subheader("📈 ydata_profiling による解析")
        profile = ProfileReport(df, title="データプロファイルレポート", explorative=True)
        report_html = profile.to_html()
        html(report_html, height=1000, scrolling=True)

        # PDF生成＆ダウンロード
        st.subheader("📥 プロファイル結果のPDF出力")

        with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_pdf:
            try:
                pdfkit.from_string(report_html, tmp_pdf.name)
                with open(tmp_pdf.name, "rb") as f:
                    st.download_button(
                        label="📄 PDFをダウンロード",
                        data=f,
                        file_name="profiling_report.pdf",
                        mime="application/pdf"
                    )
            except Exception as e:
                st.warning(f"PDFの生成に失敗しました: {e}")
```

---

## 💡 注意点

- `pdfkit` は `wkhtmltopdf` が動作環境に正しくインストールされていないとエラーになります。
- PDFレポートはWeb表示よりもややシンプルになりますが、十分に実用的です。
- 一部のフォントやグラフがPDFに反映されにくいことがあります（この場合はPNGでのエクスポートを検討するのもアリです）。

---

## ✅ 動作確認後のチェックポイント

- ✅ CSVまたはExcelファイルをアップロードできるか
- ✅ `ydata_profiling` のレポートが表示されるか
- ✅ PDFダウンロードボタンが表示され、正常に保存できるか

---

## 🚀 これでPDF出力もバッチリ！

さらに機能拡張したい場合は、以下のようなアイデアもあります：

- プロファイリング結果のHTML出力（ファイル保存）
- ユーザーが分析対象の列を選択できるフィルター機能
- デプロイしてWeb共有する（Streamlit Cloudなど）

ご希望あれば、これらの追加サポートもしますよ！

# **user**:

ありがとうございます。ここまでの話をブログに書きたいと思います。タイトル案をいくつか提案してください。

# **assistant**:

いいですね！初学者向けにStreamlitアプリを作ってPDF出力まで対応するというのは、実用性もあって人気が出そうな内容です。以下にタイトル案をいくつかのパターンに分けて提案しますね：

---

### 🎓 教育・初心者向けを意識したタイトル
1. **「はじめてのStreamlitアプリ開発：CSV/Excelアップロード＆データ分析を一発表示！」**
2. **「初心者でもできた！VSCodeで作るStreamlitデータ解析アプリの作り方」**
3. **「Python初心者がStreamlitで作る！CSV/Excel対応データプロファイラー」**

---

### 🧪 実用性・機能を押し出したタイトル
4. **「CSVもExcelもOK！Streamlit＋ydata_profilingで手軽にデータ可視化」**
5. **「PDF出力対応！Streamlitで作るデータ自動分析アプリ」**
6. **「アップロード→解析→PDF保存まで！Streamlitでデータ分析を自動化」**

---

### 🛠 開発ステップを強調したタイトル
7. **「VSCodeでStreamlitアプリ開発！データ分析レポートをPDFで出力しよう」**
8. **「5ステップで完成！ファイルアップロードからデータ解析・PDF出力まで」**

---

### 😄 少しカジュアル・ブログっぽいタイトル
9. **「ChatGPTに聞いて作った！Streamlitで作るデータ分析＆PDF出力アプリ」**
10. **「CSVでもExcelでもOK！初心者がStreamlitでデータ分析アプリ作ってみた」**

---

どの方向性がお好みですか？トーンやターゲット読者に合わせて微調整もできますよ！

# **user**:

「Streamlit × ydata_profiling で作る！CSV/Excel対応データプロファイラー」にしたいと思います。それでは最後に、今回のまとめを詳しく書いてください。

# **assistant**:

いいタイトルですね！  
**「Streamlit × ydata_profiling で作る！CSV/Excel対応データプロファイラー」**というテーマにぴったりのまとめを、以下に詳しくご用意しました。

---

## ✅ 今回のまとめ：Streamlit × ydata_profiling で作るデータプロファイラーの全体像

今回のブログでは、**初心者でもVSCodeで簡単にStreamlitアプリを作れる方法**を、実際の開発手順に沿って紹介しました。特に、**CSV/Excelファイルをアップロードして、インタラクティブなデータ解析レポートを生成し、それをPDFとして出力する**という一連の流れを丁寧に解説しました。

以下に、ポイントを整理しておきます👇

---

### 🧱 1. VSCode環境でのアプリ開発準備

- **Python・VSCode・Streamlit**のインストール方法
- 仮想環境の作成と依存ライブラリ（`streamlit`, `pandas`, `ydata-profiling`, `openpyxl`など）のインストール
- 開発用ディレクトリの構成や起動コマンド（`streamlit run app.py`）の確認

---

### 📂 2. アプリの基本機能の実装

- `streamlit.file_uploader()` を使って **CSV/Excelファイルのアップロード**を実現
- Excelファイルの場合は `pandas.ExcelFile` を用いて **シート選択機能**を実装
- アップロードしたデータを **`st.dataframe()` で即表示**

---

### 📊 3. ydata_profiling による自動データ解析

- `ProfileReport(df, explorative=True)` を使って **インタラクティブなデータプロファイリングレポート**を生成
- `streamlit.components.v1.html()` を活用し、**HTMLとしてレポートをStreamlit内に埋め込み表示**

---

### 📄 4. 分析レポートをPDFでダウンロード

- `pdfkit.from_string()` を使って **HTMLレポートをPDFに変換**
- `st.download_button()` を使い、ユーザーが **PDFとして保存・共有可能**に
- `wkhtmltopdf` のインストールが必要な点も忘れずに解説

---

### 🧠 学びと応用のヒント

- **ノーコード的にデータ解析できる**ので、分析初心者にも最適
- データの前処理やEDA（探索的データ分析）の効率化に役立つ
- 応用すれば、**列選択・フィルタ・可視化のカスタム機能**なども追加可能
- 分析結果のPDF化により、**ビジネス用途でのレポーティングや共有にも最適**

---

### 🚀 次のステップに進むなら…

- Streamlit Cloudでデプロイして **ブラウザ共有可能なWebアプリ化**
- ユーザー入力に応じたデータフィルタやチャート追加
- AI分析補助機能（例：ChatGPT APIで「このデータで気になる点を教えて」など）

---

## 📘 おわりに

今回作成したアプリは、**「アップロードするだけで分析が完了する」**という、非常に便利な仕組みです。  
初心者でも扱いやすく、実務でも応用しやすいため、ぜひ一度手を動かして体験してみてください！

---

ご希望があれば、**ブログ記事の本文の下書き**や、**コードのGitHubへのアップロード手順**などもお手伝いできますよ！お気軽にどうぞ 😊

# **user**:

ありがとうございました。今日はこの辺で。また今度よろしくお願いします！

# **assistant**:

こちらこそ、楽しい開発＆執筆のお手伝いをさせていただき、ありがとうございました！  
またいつでも気軽に声かけてくださいね 😊  
次回も楽しみにしてます。お疲れさまでした〜！