$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
新卒2年目がデータ分析API開発に挑戦【Stapy#88】/data-science-api-...
Search
松井宏典
December 16, 2022
Programming
0
680
新卒2年目がデータ分析API開発に挑戦【Stapy#88】/data-science-api-begginer
【Stapy#88】
2022/12/15に開催されたみんなのPython勉強会で発表した際の資料です。
https://startpython.connpass.com/event/266128/
松井宏典
December 16, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.4k
JETLS.jl ─ A New Language Server for Julia
abap34
1
400
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
7.2k
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
110
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
120
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
330
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
150
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
38
26k
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
270
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
110
connect-python: convenient protobuf RPC for Python
anuraaga
0
410
開発に寄りそう自動テストの実現
goyoki
2
940
Featured
See All Featured
Speed Design
sergeychernyshev
33
1.4k
Unsuck your backbone
ammeep
671
58k
How STYLIGHT went responsive
nonsquared
100
6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Visualization
eitanlees
150
16k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Transcript
新卒2年目がデータ分析APIの開発に挑戦した話 松井 宏典 株式会社スカラパートナーズ
目次 • 自己紹介 • 会社紹介 • 分析データAPIの実装内容 • AWSの話 •
クラスタリング • Pythonでの実装 • まとめなど 2/24
自己紹介 松井宏典(まつい こうすけ) 名前 Python:pandas, scikit-learn, Django aws:Lambda, S3 スキル 株式会社スカラパートナーズ(2年目)
所属 画像認識、データ分析、その他R&D 主に機械学習に関する案件を担当。 頑張ってできることを増やしています。 業務など 3/99
会社紹介 - 株式会社スカラパートナーズ - 社会課題解決を軸にした共創型のビジネス • 新規事業の立ち上げ • ワーケーション事業
開発部の開発実績 • コロナワクチン予約システム • エールラボえひめ • ナンバープレート検出モジュール • データ分析 4/24
目次 • 自己紹介 • 会社紹介 • 分析データAPIの実装内容 • AWSの話 •
クラスタリング • Pythonでの実装 • まとめなど 5/24
開発背景 BUSINESS-ALLIANCE株式会社と共同開発 アンケートデータの分析・可視化サービス 分析処理を担うAPIの開発を担当 2つのAPIを開発 • クラスタリング • テキストマイニング
6/24 引用:BUSSINESS-ALLIANCE「事業概要」 (https://business-alliance.co.jp/service/)
バックエンドのAWSの構成について ①csv保存 ②HTTPリクエスト csvの保存場所と 分析パラメータを渡す ③リクエスト 分析処理をリクエスト ④レスポンスを返す 成功時:分析結果の場所 失敗時:エラー文
分析が終わったら 結果をS3に保存 7/24
担当部分 ①csv保存 ②HTTPリクエスト csvの保存場所と 分析パラメータを渡す ③リクエスト 分析処理をリクエスト ④レスポンスを返す 成功時:分析結果の場所 失敗時:エラー文
分析が終わったら 結果をS3に保存 8/24
AWS SAMを使って構築(CloudFormationの拡張) メリット / 選んだ理由 • 使用リソースをコード上で管理 ◦ 同一設定のテスト環境と本番環境を作成できる
◦ APIのコード(Lambda)をgitで管理できる • Lambdaをローカルでテストやデバッグができる 開発環境 9/24
目次 • 自己紹介 • 会社紹介 • 分析データAPIの実装内容 • AWSの話 •
クラスタリング • Pythonでの実装 • まとめなど 10/24
クラスタリングとは 11/24 本をよく買う 服をよく買う 本をよく買う 服をよく買う クラスタリング:データをグループ分けする分析手法(教師なし学習) 市場調査、マーケティングへの活用によく使われる
クラスタリングAPIについて アンケートのようなデータを分析する想定 クラスタリングのために、データ間の距離(類似度)を定義・計算する 12/24 ID お米が好き? 野菜が好き? 果物が好き? 肉が好き?
魚が好き? 0001 好き 嫌い 好き とても好き 好き 0002 好き 普通 普通 嫌い 好き 0003 とても好き とても好き 好き 普通 普通 : 0123 嫌い 嫌い とても好き 嫌い とても嫌い
数値に変換することで、データ間の距離を計算できるようになる 入力データについて 13/24 ID お米が好き? 野菜が好き? 果物が好き? 肉が好き? 魚が好き?
0001 4(好き) 2(嫌い) 4(好き) 5(とても好き) 4(好き) 0002 4(好き) 3(普通) 3(普通) 2(嫌い) 4(好き) 0003 5(とても好き) 5(とても好き) 4(好き) 3(普通) 3(普通) : 0123 2(嫌い) 2(嫌い) 4(とても好き) 2(嫌い) 1(とても嫌い) 距離:5
入力データについて 複数選択肢から1つを選ぶ、かつ回答が段階的でない設問はどうするのか こういった変数をカテゴリカル変数といい、ダミー化という処理をする Q.以下の料理ジャンルで最も好きなものを選んでください -> 和食 / 洋食 /
中華 / イタリアン …etc 14/24 ID 好きな料理 0001 和食 0002 洋食 0003 イタリアン : 和食 洋食 中華 イタリアン 1 0 0 0 0 1 0 0 0 0 0 1 : (1=はい、0=いいえ)
入力データについて 複数選択可能な設問も考えられます。 Q.自炊をする理由として該当するものを全て選んでください。(複数選択可) ->食費を抑えたいから / 料理が好きだから / 健康的な食材を使いたい
…etc 15/24 ID 食費を抑えた い 料理が好き 健康的な食材 を使いたい 好きなものを 食べたい その他 0001 1 0 1 0 0 0002 1 1 0 0 0 0003 0 0 0 0 1 : (1=はい、0=いいえ)
目次 • 自己紹介 • 会社紹介 • 分析データAPIの実装内容 • AWSの話 •
クラスタリング • Pythonでの実装 • まとめなど 16/24
• pandas ◦ データ解析を容易にするライブラリ ◦ DataFrame型は、二次元のテーブルデータを表す ◦ 数表および時系列データの操作が簡単 • scikit-learn
◦ オープンソースの機械学習ライブラリ ◦ 今回はクラスタリングで使用 ◦ 他にも、分類、回帰などのアルゴリズムも使える • boto3 ◦ AWSをPythonから操作するためのライブラリ ◦ 今回は、Lambda上からS3にアクセスするのに使用 主な使用ライブラリ 17/24
クラスタリングのコード例 18/24
• フロント側からパラメータを受け取る ◦ クラスタリングする数など • 解析結果を可視化できるような出力 ◦ クロス集計 ◦ レーダーチャート
• テキストマイニングのAPIを別で作成 ◦ 自由回答のあるアンケートを想定 ◦ 単語集計、共起ネットワークの生成 その他の実装内容 19/24
目次 • 自己紹介 • 会社紹介 • 分析データAPIの実装内容 • AWSの話 •
クラスタリング • Pythonでの実装 • まとめなど 20/24
距離定義の話 • 距離をどう定義するのが”一般的か”で悩んだ • 結論、細かい調整はデータや調査の目的次第 ◦ 質量混在データはgower距離 ◦ 標準化(平均0, 分散1)して相対的に距離計算
苦労したこと 21/24 回答者 肉が好き? 野菜が好き? 好きな料理 A 4 3 中華 B 4 5 中華 C 4 3 イタリアン BさんとCさんのどちらが Aさんに近い(似ている)か? カテゴリ変数と数値変数の 距離をどう比べるのか?
苦労したこと subprocessをLambda上で使用した際のメモリエラー • テキストマイニングAPIで、コマンド実行するためにsubprocessを使っていた • 連続でAPIを叩くとメモリ不足のエラー ◦ なぜか再現性がなく、とりあえずメモリ拡張したけど再発した •
subprocess.run(‘ls’)みたいなコマンドでも同様のバグ発生 ◦ コマンドの内容ではなく、subprocessの挙動の問題 • subprocessが子プロセスをコピーして生成する、みたいなのがエラーの原因? ◦ 加えて、Lambdaのライフサイクルがブラックボックス ◦ メモリ容量を監視することで、ちゃんとエラー発生を追えるようになった • 結局メモリ解放する処理を加えたら直った ◦ Lambdaでsubprocessは非推奨とのことだった 22/24
まとめ • データ分析の知識がかなりついた ◦ 適した手法、適していない手法などは知識が重要 ◦ 基礎的な数学知識はあって良かった • awsのサーバーレスアプリケーションの知識もついた ◦
Lambda, SAMなど • 保守性などに難ありかも ◦ テスト設計をあまりせずに開発をしていた ◦ 1人で書いていて可読性を犠牲にするときもしばしば.... 23/24