- 1.背景・目的
- 2.プロジェクト概要
- 3.技術スタック
- 4. システム構成
- 5. 主な機能詳細
- 6. デモ・キャプチャ
- 7. 開発中の工夫・学び
- 8.ふりかえりと今後の展望
- 8-1. ふりかえり
- 8-2.今後の展望
- . リンク
1.背景・目的
1-1.背景
社会復帰のために通っている就労移行支援事業所の活動で、機械学習データコンペティションの練習問題を解いた経験があります。 その際、コンペサイトから取得したデータが非常に整っていたため、「業務でこんなにきれいなデータを見たことがない」と感じました。 経験上、データベースやExcelのデータは様々な原因で乱れていることが多く、データを整える仕組みの重要性を強く実感していました。
上記のような体験を通じ、AIやデータ分析者に渡す「信頼できるデータ」を作る仕組みを誰かが担う必要を感じています。そのような仕組みづくりの学習の一貫で、データエンジニアリングという技術分野を知り、現在はその分野での就業を目指して学習を始めています。
今回のポートフォリオでは、以下を実現させたいと考えています。 - データの質を高めていく技術を学ぶ - データ分析システムに関わる仕事に近づく実績を作る - 就職につながる何等かの機会につなげる
1-2.目的
背景の通り、データエンジニアリング分野での就業を目指しています。そのために、ひとまずAzure Data Foundation(DP-900)の資格も取得しました。データの種類(構造、半構造、非構造)やデータベースの種類、データ分析システムの流れ、BIによる分析などの基本的な知識は身につけ、それをクラウドでどのように解決するのかを学びました。
ただ、それだけでは就職に向けた実績に不十分と感じています。そのため、技術力と学習姿勢を評価してもらうべくポートフォリオを作成していました。 まだ完成ではないですが、最小限の動くアプリケーション(以下、MVP)として一通りの機能と画面表示ができるようになったため公開します。
2.プロジェクト概要
Streamlitというフレームワークを知ったのがこのポートフォリオを思いついたきっかけです。 Pythonだけでダッシュボードを作れるため、データを扱うのが得意な言語・ライブラリの特性を活かすことができると感じました。 そこで、Pythonでデータの取得・加工・可視化の一連の処理を実装することを目標としました。
また、今回利用したEDINET APIを操作する以下の記事から、オープンデータを利用した分析の学習方法も学びました。
https://k-dm.work/ja/finance/misc/edinet/k-dm.work
主な機能 - 主要財務指標(売上高、営業利益等)のCSVデータを解析・可視化 - 企業選択UIや提出日表示、利益率グラフなどダッシュボード機能を搭載 - Streamlitによる直感的な可視化・UI構築
3.技術スタック
| 分野 | 技術/ツール | バージョン | 理由・特徴 |
|---|---|---|---|
| 言語 | Python | 3.12 | データ解析・保守性 |
| フレームワーク | Streamlit | - | 高速なダッシュボード構築 |
| ライブラリ | Pandas | - | 財務データ高速処理 |
| DB | PostgreSQL | (今後拡張予定) | データ永続化・検索性 |
| インフラ | Docker/Compose | - | 環境再現・セットアップ簡易化 |
| CI/CD | GitHub Actions | - | 継続的インテグレーション・テスト自動化 |
| その他 | Ruff, uv, pytest | - | コード品質・保守性 |
4. システム構成
- 金融庁のEDINET APIにアクセス、財務データをCSVで取得
- CSV→解析→Streamlitダッシュボード表示 ※現在はAPIからのCSV取得機能と可視化機能は接続しておらず、CSVのままStreamlitで可視化 ※将来的にCSVをDBに保存し、そこからダッシュボード表示予定
5. 主な機能詳細
- 企業選択UI(サイドバー/動的拡張予定)
- 売上・利益等の主要指標の取得・比較グラフ
- 利益率グラフ(営業/経常/純利益率の推移)
- DataFrameの表示/非表示切り替え
6. デモ・キャプチャ
7. 開発中の工夫・学び
Dockerによる開発環境の統一化
仮想環境はVMWare位で、コンテナ利用は初めてでした。 過去の業務で難しかった開発環境の共有がこんなに簡単に行えると知って感動しました。
過去の業務では、プロジェクトの引き継ぎてJavaの環境構築時に数日トラブって、PCをクリーンアップする羽目になったこともあります。
今回の開発では通所時は貸与PCのWindows、在宅では自宅のMacで作業を行っていたため、Dockerの導入がなければもっと作成に時間がかかっていたと思われます。Pythonでフロントエンド・バックエンドを統一
分析画面はBIの導入も検討していましたが、Streamlitというフレームワークの存在を知って試すことにしました。 コードでBIのようなダッシュボードを書くことができるという触れ込みの通りで、楽しく画面の設計・実装が進みました。
特にドキュメントがわかりやすくなっており、事例も豊富にのっているため、初学者の私にも安心して使えました。 今後拡張予定のDBにもORマッパーを利用するため、基本的にPythonのみでシステムが組めそうです。
8.ふりかえりと今後の展望
8-1. ふりかえり
見積もりの甘さ、作業時間が不足、いつまでも終わらない等トラブル続き
システム全体を設計〜実装するのは初めての経験です。 システムエンジニア時代の経験も役立たたない場面が多く、いつまでも完成しないのでは?と頭を抱える日々でした。 8月末を締め切りとしたことで、今回はMVPとしてまとめることができました。
今後はスクラムのように2週間スプリントとしてスケジュール管理を行いGitHub Projectにタスクを明示化することで、何をやるべきかを明確にしていき、修正したいと考えています。生成AIを教師役、シニアエンジニア、同僚など様々な役割で活用
プロジェクトでは生成AIに要件定義・設計の文章化、アーキテクチャー設計に関する調査、作成したコードのレビューなど様々な役割でサポートしてもらいました 。
就労移行支援事業所にもエンジニアさんに相談できる機会はあるのですが、2週間に1度となっているため、普段はAIをうまく活用することで作業を進めています。 ただ、コードをそのままコピーしないように気をつけています。データエンジニアコミュニティに参加
これはプロジェクトとは離れますが、データエンジニア・分析業務向けのイベントや勉強会にも参加しました。 現役の方達からお話を聞くことができ、自分に足りないものを知ることができました。 今後もコミュニティ活動は続けていきたいので、いつかこういうコミュニティで登壇できる側になりたいと思っています。
8-2.今後の展望
- Postgres連携・EDINET APIによる企業情報取得の拡張
- Google Cloud上に移設、BigQueryなどのDWHで実行できるように拡張
- Google Cloudの利用に向けて、Google Associate Cloud Engineer資格を学習中
. リンク
GitHub: ↓リポジトリはこちら github.com
セットアップ: docker compose up --build ですぐに開発環境が起動可能