データの前処理とデータベースの準備

Streamlitで効果的なBIダッシュボードを構築するためのデータ基盤の整備方法を学習する

本章では、Streamlitで効果的なBIダッシュボードを構築するためのデータ基盤の整備方法を学びます。特に、データの前処理からデータベースの選定まで、実用的な知識を習得できます。

多くの組織ではデータが SaaSExcelCSV ファイルなど多様な形式で散在しています。Streamlit は、それらのデータを活用してダッシュボードや業務アプリを素早く構築できる強力なフレームワークですが、その前提として「データが使いやすい形に整っていること」 が欠かせません。具体的には、分析や可視化を行う前に

  • 分類ラベルの付与による集計単位の標準化
  • 個人情報のマスキングなどコンプライアンス対応
  • クエリ負荷を下げるための中間集計テーブルの生成
  • RAGのためのベクトルインデックス作成

といった前処理(ETL: Extract, Transform, Load・ELT: Extract, Load, Transform)が必要です。

前処理の結果を扱う方法は大きく二つあります。

  1. リアルタイム処理Streamlit 内で直接 pandasSQL を実行し、その場で整形して表示する
  2. バッチ処理+データベース – 前処理済みデータを DWH(Data Warehouse)や RDB(Relational Database)に格納し、定期的に更新して参照する

小規模データや試作段階では前者で問題ありませんが、データ量が増えたり応答速度が求められると、後者のように専用データベースを介す設計が不可欠になります。

以下の図では、リアルタイム処理とバッチ処理+データベースの処理フローの違いを示しています。

データ処理アプローチの比較図を挿入

データベースには用途ごとに得意分野が異なる種類が存在し、それぞれ技術的な特徴があります。そこで本章では、代表的なデータベース(Snowflake・BigQuery・PostgreSQL・Pinecone)の技術的特徴、および 前処理したデータを継続的に更新・活用するためのベストプラクティス を丁寧に解説します。

代表的なデータベースの紹介

データベースは 「どのようなデータを、どの速度で、どう分析・検索したいか」 によって得意分野が分かれます。ここでは Streamlit と相性がよく、企業でも広く採用されている3タイプを取り上げます。

Database type concept diagram

各データベースタイプの適用領域と技術的特徴を視覚的に比較できます。

その他にも、社内向けの全文検索エンジンであるOpenSearchやAlgoliaなど用途に特化したデータベースは数多く存在しています。

データベースの技術的特徴

各データベースタイプには、それぞれ技術的な得意分野があります。

データウェアハウス(DWH)の特徴

  • 大量データの集計処理に最適化されており、数億レコードの集計も数秒で完了
  • 列指向ストレージにより、必要な列だけを読み込んで高速な集計が可能
  • スケーラブルな計算リソースで処理能力を動的に調整し、ピーク時だけ性能を向上

リレーショナルデータベース(RDB)の特徴

  • ACID特性(原子性・一貫性・独立性・永続性) により高いデータ整合性を保証
  • 行指向ストレージで個別レコードの更新・検索が高速に実行可能
  • 豊富な機能とSQL標準への高い準拠性で、複雑な業務ロジックにも対応

ベクトルストアの特徴

  • 高次元ベクトル(数百〜数千次元)の類似度検索に特化した設計
  • 近似最近傍探索アルゴリズムで、ミリ秒単位での高速検索を実現
  • 生成AI との連携でセマンティック検索が可能、従来のキーワード検索を超えた精度

以下にStreamlitと組み合わせやすい主要なデータベースサービスの特徴とユースケースを紹介します。

前処理をしてデータベースを構築する

Streamlitのダッシュボードを最新の状態に保つためには、ETL(Extract → Transform → Load) と呼ばれる処理を定期的に行い、データをデータベースに書き込む必要があります。ここでは、実行方法ごとに整理してわかりやすく説明します。


どの方法から始めればよいか?

まずは手軽に始められる 手動実行 がおすすめです。Pythonのスクリプトを作ってターミナルやStreamlitのボタンから実行し、期待通りに動くか試してみましょう。

PCを常時稼働させるのが難しい場合や、複数人のチームでETL処理を共有したい場合は、初心者向けのクラウドサービスを検討しましょう。

例えば Prefect Clouddlt Cloud は、ブラウザで簡単に定期実行ジョブを設定できるサービスで、設定やログの確認も簡単に行えます。専門的なクラウドの知識がなくても利用を始めることができます。

さらに、扱うデータの数や種類が多くなり、設定や管理が複雑になった場合には、Fivetranのような 専用のETLサービス を活用すると便利です。GUIを通じて直感的にデータ転送を設定でき、複雑なコード管理を避けることができます。

また、どの方法を選んだとしても、ETLが正常に完了したことを確認する仕組みを作っておくことが大切です。

例えば処理完了後にメールやSlackへ通知を送信するように設定すると、毎回結果を簡単に確認でき、処理が止まってしまった場合でもすぐに気付いて対応できます。

このように、最初はシンプルな方法からスタートし、データ量や用途に応じて段階的により便利な方法へ切り替えていくと、効率的で無理のない運用ができるようになります。

データベース内での前処理(dbt)

データベース内でデータ変換を行う dbtというツールも人気が高まっています。これは、データを一度データベースに読み込んだ後、データベース内でSQL文を使ってデータの変換や集計を行う方法です。

dbtのメリット

  • SQLに慣れた人であれば学習コストが低い
  • 処理の履歴をGitで管理できる
  • データの品質チェックを自動化できる

適用場面

  • DWH(SnowflakeやBigQuery)を使用している
  • チームにSQLが得意な人がいる
  • データの品質管理を重視したい

用語解説とETL/ELTの理解

前処理を理解するために、重要な用語を整理しておきましょう。

ETLとELTの違い

ETL(Extract-Transform-Load)とELT(Extract-Load-Transform)は、データ処理の順序が異なります

  • ETL:データを抽出→変換→データベースに格納
  • ELT:データを抽出→データベースに格納→データベース内で変換

ETL/ELT processing flow diagram

ETLとELTでは、データ変換を行うタイミングと場所が異なることがわかります。

中間集計テーブルとは

中間集計テーブルとは、よく使われる集計結果を事前に計算して保存したテーブルです。

例:日次売上データから月次サマリーを作成

# 元データ:daily_sales テーブル
# 日付, 商品, 売上金額

# 中間集計テーブル:monthly_summary
# 年月, 合計売上, 注文件数
monthly_summary = daily_sales.groupby(['年月']).agg({
    '売上金額': 'sum',
    '注文ID': 'count'
})

ベクトルインデックスとは

ベクトルインデックスは、文章や画像を数値の配列(ベクトル)に変換して保存する仕組みです。これにより「似ている内容の検索」が可能になります。

例:文書検索での活用

# 文章をベクトル化
document_vector = embedding_model.encode("売上が増加している")

# 類似文書を検索
similar_docs = vector_index.search(document_vector, top_k=5)

前処理のベストプラクティス

効果的なデータ前処理を行うために、以下のポイントを押さえておきましょう。

1. データの標準化

異なるデータソースから取得したデータの形式を統一します。

よくある標準化作業

  • 日付形式の統一(「2024/01/01」→「2024-01-01」)
  • 地域名の統一(「東京」「Tokyo」→「東京都」)
  • 数値の単位統一(「100円」「¥100」→「100」)

2. データクレンジング

データの品質を向上させるための清掃作業を行います。

主なクレンジング作業

  • 重複データの除去
  • 欠損値の処理(削除または補完)
  • 異常値の検出と処理
  • 不要な文字の除去(空白、特殊文字など)

3. 個人情報の保護

コンプライアンス要件を満たすため、個人を特定できる情報を適切に処理します。

保護の方法

  • 仮名化:「田中太郎」→「顧客A」
  • マスキング:「tanaka@example.com」→「ta***@example.com」
  • ハッシュ化:元の値から一意のIDを生成

4. パフォーマンス最適化

ダッシュボードの表示速度を向上させるための工夫を行います。

最適化の手法

  • 中間集計テーブル:よく使われる集計結果を事前計算
  • インデックス作成:検索対象のカラムにインデックスを設定
  • データ分割:大きなテーブルを期間や地域で分割

まとめ

この章では、Streamlit でのダッシュボード構築に欠かせないデータの前処理とデータベース準備について学びました。

重要なポイント

  1. 前処理の必要性:散らばったデータを使いやすい形に整えることで、効果的なダッシュボードが構築できる

  2. データベースの技術的理解:各データベースタイプの技術的特徴を理解し、用途に応じた適切な選択をする

  3. 段階的な発展:手動実行から始めて、必要に応じて自動化や高度なツールに移行する

  4. 品質とセキュリティ:データの標準化、クレンジング、個人情報保護を適切に行う

次のステップ

適切なデータベースを選択し、データの前処理方針が決まったら、次は実際にStreamlitからデータベースに接続する方法を学びます。次の章では、具体的な接続方法や効率的なクエリの作成方法を詳しく解説します。

データ基盤がしっかりと整っていることで、より高度で使いやすいダッシュボードの構築が可能になります。

クレジットカード不要で始められます

データと会話を始める