レバレジーズ データAIブログ

インハウスデータ組織のあたまのなか

CSV納品に“差分”を添える:Streamlitで軽量ミニアプリを作ってみた

はじめに

※本記事の内容は、筆者個人の見解を含みます。

こんにちは。レバレジーズのテクノロジー戦略室でデータエンジニアをしている内山です。
日々の業務には、「ここが少し楽になれば」「すぐ確認できれば」という小さな不便が潜んでいます。
そういう課題こそ、ちょっとした仕組みでサクッと解消できると嬉しいものですよね。
最近は、Pythonだけで Webアプリを作れる Streamlit という手軽な選択肢もあり、思いついた改善をすぐ形にできるようになりました。
今回紹介するミニアプリもそのひとつで、CSVデータの差分を自動で整理して表示することで、確認の手間をぐっと軽くするものです。大掛かりな開発ではなくても、日々の仕事に少しの付加価値を添えられるそんな取り組みを紹介します。

背景

私は定期的に収集したデータを CSV で関係部署へ納品しています。これまでの納品では、定期的に更新されるデータをCSVで共有するだけになりがちでした。すると、受け取り側、特に非エンジニアの方々にとっては、どのレコードが増えたのか、何が変わったのかを自分で確認しなければならず、分析や意思決定の前にひと手間かかる状況でした。

せっかく最新データが手元に届いても、必要な差分を自力で探すのは負担が大きく、活用までに時間がかかってしまいます。そこで、変化点を最初から提示できれば、よりスムーズにデータを活かせると感じるようになりました。

実現したいこと

今回の取り組みで目指したのは、納品時に「どこが変わったのか」をすぐ把握できるようにすることです。アプリ上でCSVをアップロードし、主キーを指定するだけで、追加・削除・更新といった差分が整理されて表示されます。

まだ正式導入には至っていませんが、ちょっと触ってもらった際に「これあると助かる」という声もあり、業務の小さな不便を解消するための一歩として、継続して改善していく価値があると感じています。

技術構成

まず、今回利用した Streamlit について補足します。

Streamlitとは?

Pythonだけでサクッとデータアプリを作れる、オープンソースのWebフレームワークです。

  • UI部品(ボタン/選択)をすぐ実装
  • ローカルでもすぐ動いて共有しやすい
  • データ可視化が得意

「まず触れる形にする」業務改善と相性が良く、今回のような軽量ミニアプリに向いています。

また、UI部品の実装が容易で、小さな改善をすぐ形にできるため、今回のユースケースと非常に相性が良いと判断しました。

扱うデータはCSVのみで、特別な環境構築も不要です。技術構成も非常にシンプルです。

デプロイには Streamlit Cloud を利用すれば、GitHub と連携してアプリを公開できます。

URLを共有するだけで触ってもらえるため、導入ハードルが非常に低い点も利便性のひとつです。

要素 内容
フレームワーク Streamlit
差分処理 Pandas(merge + 条件判定)
可視化 Streamlitのチャート機能

最小限の構成でも、差分抽出から可視化まで一通りカバーでき、小さく効率よく改善に踏み出せると実感しました。

画面イメージ

アプリ上で2つのCSVをアップロードし、主キーを選択するだけで差分が分類されます。
追加・削除・更新ごとの件数や変化量をすぐに確認でき、必要に応じて詳細行も参照できます。

表示内容

  • 追加/削除/更新ごとのデータ表示
  • 件数サマリの表示
  • 全体の増減を把握できる棒グラフ

コード概要

差分の抽出は、Pandasのmergeをベースにシンプルに実装しています。下記は主要な処理の抜粋です。

import pandas as pd

def compare_csv(old_df, new_df, key):
    merged = old_df.merge(new_df, on=key, how='outer', indicator=True)

    added = merged[merged['_merge'] == 'right_only']
    removed = merged[merged['_merge'] == 'left_only']

    both = merged[merged['_merge'] == 'both']
    # 値の変化がある行を抽出(簡易判定)
    updated = both[both.filter(regex='_x$') != both.filter(regex='_y$')]

    return added, removed, updated

詳細な例外処理までは行っていませんが、まずは動くものを素早く作れるのがこの構成の良いところだと感じました。

効果と学び

実際に試してみて、次のような気づきがありました。

  • Pythonが書ければすぐ形にできるフレームワーク学習コストが低い)
  • ローカルで動かしてすぐ共有できる(配布のハードルが低い)
  • 画面で差分が見えると確認が進む(判断へのつながりが早い)

現場で使うツールは、完璧さよりも「まず使える状態にする」ことが大切であり、Streamlitはその一歩をとても踏み出しやすいと感じました。

まとめ

今回の取り組みを通じて、思ったより気軽に作れるという発見がありました。データを渡すだけでなく、データ差分を一緒に届けることで、受け取り側の利活用が一段と進みやすくなると感じています。

小さな改善ではありますが、こうした付加価値の提供を積み重ねていくことで、業務全体のスピードや使い勝手を少しずつ良くしていければと思います。

最後までお読みいただき、ありがとうございました。