Upgrade to Pro — share decks privately, control downloads, hide ads and more …

新卒2年目がデータ分析API開発に挑戦【Stapy#88】/data-science-api-...

松井宏典
December 16, 2022

 新卒2年目がデータ分析API開発に挑戦【Stapy#88】/data-science-api-begginer

【Stapy#88】
2022/12/15に開催されたみんなのPython勉強会で発表した際の資料です。
https://startpython.connpass.com/event/266128/

松井宏典

December 16, 2022
Tweet

Other Decks in Programming

Transcript

  1. 目次
 • 自己紹介
 • 会社紹介
 • 分析データAPIの実装内容
 • AWSの話
 •

    クラスタリング
 • Pythonでの実装
 • まとめなど
 2/24
  2. 自己紹介
 松井宏典(まつい こうすけ)
 名前
 Python:pandas, scikit-learn, Django
 aws:Lambda, S3
 スキル
 株式会社スカラパートナーズ(2年目)


    所属
 画像認識、データ分析、その他R&D
 主に機械学習に関する案件を担当。
 頑張ってできることを増やしています。
 業務など
 3/99
  3. 会社紹介 - 株式会社スカラパートナーズ -
 社会課題解決を軸にした共創型のビジネス
 • 新規事業の立ち上げ
 • ワーケーション事業
 


    開発部の開発実績
 • コロナワクチン予約システム
 • エールラボえひめ
 • ナンバープレート検出モジュール
 • データ分析
 4/24
  4. 目次
 • 自己紹介
 • 会社紹介
 • 分析データAPIの実装内容
 • AWSの話
 •

    クラスタリング
 • Pythonでの実装
 • まとめなど
 5/24
  5. AWS SAMを使って構築(CloudFormationの拡張)
 
 メリット / 選んだ理由
 • 使用リソースをコード上で管理
 ◦ 同一設定のテスト環境と本番環境を作成できる


    ◦ APIのコード(Lambda)をgitで管理できる
 • Lambdaをローカルでテストやデバッグができる
 開発環境
 9/24
  6. 目次
 • 自己紹介
 • 会社紹介
 • 分析データAPIの実装内容
 • AWSの話
 •

    クラスタリング
 • Pythonでの実装
 • まとめなど
 10/24
  7. クラスタリングAPIについて
 アンケートのようなデータを分析する想定
 クラスタリングのために、データ間の距離(類似度)を定義・計算する
 
 12/24 ID お米が好き? 野菜が好き? 果物が好き? 肉が好き?

    魚が好き? 0001 好き 嫌い 好き とても好き 好き 0002 好き 普通 普通 嫌い 好き 0003 とても好き とても好き 好き 普通 普通 : 0123 嫌い 嫌い とても好き 嫌い とても嫌い
  8. 数値に変換することで、データ間の距離を計算できるようになる
 
 入力データについて
 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
  9. 入力データについて
 複数選択可能な設問も考えられます。
 
 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=いいえ)

  10. 目次
 • 自己紹介
 • 会社紹介
 • 分析データAPIの実装内容
 • AWSの話
 •

    クラスタリング
 • Pythonでの実装
 • まとめなど
 16/24
  11. • pandas
 ◦ データ解析を容易にするライブラリ
 ◦ DataFrame型は、二次元のテーブルデータを表す
 ◦ 数表および時系列データの操作が簡単
 • scikit-learn


    ◦ オープンソースの機械学習ライブラリ
 ◦ 今回はクラスタリングで使用
 ◦ 他にも、分類、回帰などのアルゴリズムも使える
 • boto3
 ◦ AWSをPythonから操作するためのライブラリ
 ◦ 今回は、Lambda上からS3にアクセスするのに使用
 主な使用ライブラリ
 17/24
  12. • フロント側からパラメータを受け取る
 ◦ クラスタリングする数など
 • 解析結果を可視化できるような出力
 ◦ クロス集計
 ◦ レーダーチャート


    • テキストマイニングのAPIを別で作成
 ◦ 自由回答のあるアンケートを想定
 ◦ 単語集計、共起ネットワークの生成
 その他の実装内容
 19/24
  13. 目次
 • 自己紹介
 • 会社紹介
 • 分析データAPIの実装内容
 • AWSの話
 •

    クラスタリング
 • Pythonでの実装
 • まとめなど
 20/24
  14. 距離定義の話
 • 距離をどう定義するのが”一般的か”で悩んだ
 • 結論、細かい調整はデータや調査の目的次第
 ◦ 質量混在データはgower距離
 ◦ 標準化(平均0, 分散1)して相対的に距離計算


    苦労したこと
 21/24 回答者 肉が好き? 野菜が好き? 好きな料理 A 4 3 中華 B 4 5 中華 C 4 3 イタリアン BさんとCさんのどちらが
 Aさんに近い(似ている)か?
 
 カテゴリ変数と数値変数の
 距離をどう比べるのか?

  15. 苦労したこと
 subprocessをLambda上で使用した際のメモリエラー
 • テキストマイニングAPIで、コマンド実行するためにsubprocessを使っていた
 • 連続でAPIを叩くとメモリ不足のエラー
 ◦ なぜか再現性がなく、とりあえずメモリ拡張したけど再発した 
 •

    subprocess.run(‘ls’)みたいなコマンドでも同様のバグ発生 
 ◦ コマンドの内容ではなく、subprocessの挙動の問題
 • subprocessが子プロセスをコピーして生成する、みたいなのがエラーの原因? 
 ◦ 加えて、Lambdaのライフサイクルがブラックボックス 
 ◦ メモリ容量を監視することで、ちゃんとエラー発生を追えるようになった 
 • 結局メモリ解放する処理を加えたら直った 
 ◦ Lambdaでsubprocessは非推奨とのことだった
 22/24
  16. まとめ
 • データ分析の知識がかなりついた
 ◦ 適した手法、適していない手法などは知識が重要
 ◦ 基礎的な数学知識はあって良かった
 • awsのサーバーレスアプリケーションの知識もついた
 ◦

    Lambda, SAMなど
 • 保守性などに難ありかも
 ◦ テスト設計をあまりせずに開発をしていた
 ◦ 1人で書いていて可読性を犠牲にするときもしばしば....
 23/24