0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

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/
  • Python拡張機能もインストールしておくと便利です(拡張機能 → Python を検索してインストール)

2. Pythonのインストール

3. 仮想環境の作成(推奨)

python -m venv env
source env/bin/activate     # macOS/Linux の場合
env\Scripts\activate        # Windows の場合

4. 必要なライブラリのインストール

pip install streamlit pandas openpyxl ydata-profiling

📁 プロジェクト構成(例)

streamlit-data-profiler/
├── app.py
└── sample.xlsx(←テスト用Excelファイルなど)

🧑‍💻 app.pyのコード

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)

▶️ アプリを起動する

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

streamlit run app.py

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


💡 補足

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

🧪 テスト用ファイル

自分でExcelや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上からダウンロードできるようにボタンを追加

📦 必要な追加ライブラリ

pdfkitwkhtmltopdfが必要です:

1. pdfkitのインストール(Pythonライブラリ)

pip install pdfkit

2. wkhtmltopdf のインストール(PDF変換エンジン)

  • macOS (Homebrew):
brew install --cask wkhtmltopdf

✏️ 修正後の app.py

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

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}")

💡 注意点

  • pdfkitwkhtmltopdf が動作環境に正しくインストールされていないとエラーになります。
  • 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対応データプロファイラー」

🧪 実用性・機能を押し出したタイトル

  1. 「CSVもExcelもOK!Streamlit+ydata_profilingで手軽にデータ可視化」
  2. 「PDF出力対応!Streamlitで作るデータ自動分析アプリ」
  3. 「アップロード→解析→PDF保存まで!Streamlitでデータ分析を自動化」

🛠 開発ステップを強調したタイトル

  1. 「VSCodeでStreamlitアプリ開発!データ分析レポートをPDFで出力しよう」
  2. 「5ステップで完成!ファイルアップロードからデータ解析・PDF出力まで」

😄 少しカジュアル・ブログっぽいタイトル

  1. 「ChatGPTに聞いて作った!Streamlitで作るデータ分析&PDF出力アプリ」
  2. 「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:

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?