データサイエンティストがより良いコードを書くために、ソフトウェア開発の基本手法を学ぶための実践的なガイドブック。読みやすく保守しやすいPythonコードの書き方を具体的な例とともに解説します。テスト、ロギング、リファクタリング、ドキュメント、パフォーマンス、デプロイなど、実務に役立つ内容が満載です。AIがコードを自動生成する時代でも、コードの質を見極める力が重要だという視点に立脚し、自らの判断でコードを設計・評価できるスキルを身につける実用性重視の一冊。対象読者は、初中級者のデータサイエンティストおよびデータサイエンス分野への進出を考えているソフトウェア開発者。
データサイエンスのためのソフトウェアエンジニアリング入門
―明快かつ速いコードを書く
Catherine Nelson 著、漆戸 パティ 訳
![[cover photo]](https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0132-1.jpeg)
- TOPICS
- Data Science , Python
- 発行年月日
- 2025年10月22日 発売予定
- PRINT LENGTH
- 308 (予定)
- ISBN
- 978-4-8144-0132-1
- 原書
- Software Engineering for Data Scientists
- FORMAT
関連ファイル
目次
賞賛の声 まえがき 1章 良いコードとは何か? 1.1 優れたコードが重要な理由 1.2 変化する要件への対応 1.3 単純さ 1.3.1 同じことを繰り返さない(DRY) 1.3.2 冗長なコードを避ける 1.4 モジュール化 1.5 可読性 1.5.1 標準と慣習 1.5.2 命名法 1.5.3 クリーンアップ 1.5.4 ドキュメンテーション 1.6 パフォーマンス 1.7 堅牢性 1.7.1 エラーとロギング 1.7.2 テスト 1.8 まとめ 2章 パフォーマンスの分析 2.1 パフォーマンス向上の方法 2.2 実行時間の計測 2.3 プロファイリング 2.3.1 cProfile 2.3.2 line_profiler 2.3.3 Memrayによるメモリプロファイリング 2.4 時間計算量 2.4.1 時間計算量の見積もり 2.4.2 オーダー記法 2.5 まとめ 3章 データ構造 3.1 Pythonのネイティブなデータ構造 3.1.1 リスト 3.1.2 タプル 3.1.3 辞書 3.1.4 セット(集合) 3.2 NumPy 3.2.1 NumPyの関数 3.2.2 NumPyのパフォーマンスに関する考察 3.2.3 Daskを使った配列演算 3.3 機械学習における配列 3.4 pandas 3.4.1 DataFrameの機能 3.4.2 DataFrameのパフォーマンス 3.5 まとめ 4章 オブジェクト指向プログラミングと関数型プログラミング 4.1 オブジェクト指向プログラミング 4.1.1 クラス、メソッド、属性 4.1.2 クラスの定義 4.1.3 OOPの主要概念 4.2 関数型プログラミング 4.2.1 ラムダ関数とmap() 4.2.2 関数をDataFrameに適用 4.3 どのパラダイムを使うべきか? 4.4 まとめ 5章 エラー、ログ、デバッグ 5.1 Pythonのエラー 5.1.1 Pythonのエラーメッセージ 5.1.2 エラー処理 5.1.3 エラーの生成 5.2 ロギング 5.2.1 何を記録するか 5.2.2 ロギングの設定 5.2.3 ログの取り方 5.3 デバッグ 5.3.1 デバッグの戦略 5.3.2 デバッグ用ツール 5.4 まとめ 6章 コードのフォーマット、リンティング、型チェック 6.1 コードの形式とスタイルガイド 6.1.1 PEP 8 6.1.2 importのフォーマット 6.1.3 Blackを使ったフォーマッティング 6.2 リンター 6.2.1 リンティング用ツール 6.2.2 IDE内でのリンティング 6.3 型チェック 6.3.1 型注釈 6.3.2 mypyによる型チェック 6.4 まとめ 7章 テスト 7.1 テストを書くべき理由 7.2 テストの時期 7.3 テストの書き方と実行方法 7.3.1 基本的なテスト 7.3.2 予期しない入力のテスト 7.3.3 pytestを使った自動テストの実行 7.4 その他のテスト用フレームワーク 7.5 テストの種類 7.5.1 単体テスト 7.5.2 統合テスト 7.6 データ検証 7.6.1 データ検証の例 7.6.2 Panderaを使ったデータ検証 7.6.3 Pydanticによるデータ検証 7.7 機械学習用のテスト 7.7.1 モデルトレーニングのテスト 7.7.2 モデル推論のテスト 7.8 まとめ 8章 デザインとリファクタリング 8.1 プロジェクトのデザインと構造 8.1.1 プロジェクトデザインの考慮事項 8.1.2 機械学習プロジェクトの例 8.2 コードのデザイン 8.2.1 モジュラーコード 8.2.2 コードデザインの枠組み 8.2.3 インタフェースと契約 8.2.4 結合度 8.3 ノートブックからスケーラブルなスクリプトへ 8.3.1 なぜノートブックの代わりにスクリプトを使うのか 8.3.2 ノートブックからのスクリプト作成 8.4 リファクタリング 8.4.1 リファクタリングの戦略 8.4.2 リファクタリングの例 8.5 まとめ 9章 ドキュメンテーション 9.1 コードベース内のドキュメンテーション 9.1.1 ネーミング 9.1.2 コメント 9.1.3 docstring 9.1.4 README、チュートリアル、その他の長いドキュメント 9.2 Jupyterノートブックにおけるドキュメンテーション 9.3 機械学習の実験の文書化 9.4 まとめ 10章 コードの共有 10.1 Gitを使ったバージョン管理 10.1.1 Gitの動作 10.1.2 変更とコミットの追跡 10.1.3 リモートとローカル 10.1.4 ブランチとプルリクエスト 10.2 依存ライブラリと仮想環境 10.2.1 仮想環境 10.2.2 pipによる依存関係の管理 10.2.3 Poetryによる依存関係の管理 10.3 パッケージング 10.3.1 パッケージングの基本 10.3.2 pyproject.toml 10.3.3 パッケージのビルドとアップロード 10.4 まとめ 11章 API 11.1 APIの呼び出し 11.1.1 HTTPメソッドとステータスコード 11.1.2 SDGs APIからのデータの取得 11.2 独自APIの作成 11.2.1 独自APIのセットアップ 11.2.2 APIへの機能の追加 11.2.3 GETエンドポイントの追加 11.2.4 POSTエンドポイントの追加 11.2.5 独自APIの呼び出し 11.3 まとめ 12章 自動化とデプロイ 12.1 コードのデプロイ 12.2 自動化の例 12.2.1 コミット前フック 12.2.2 GitHub Actions 12.3 クラウドへのデプロイ 12.3.1 コンテナとDocker 12.3.2 Dockerコンテナの構築 12.3.3 Google CloudへのAPIのデプロイ 12.3.4 他のクラウドプロバイダーを使ったAPIのデプロイ 12.4 まとめ 13章 セキュリティ 13.1 セキュリティとは 13.2 セキュリティリスク 13.2.1 クレデンシャル、物理的セキュリティ、ソーシャルエンジニアリング 13.2.2 サードパーティーのパッケージ 13.2.3 Pythonのpickleモジュール 13.2.4 バージョン管理システムのリスク 13.2.5 APIのセキュリティリスク 13.3 セキュリティ対策 13.3.1 セキュリティに関するレビューとポリシー 13.3.2 安全なコーディングのためのツール 13.3.3 シンプルなコードスキャン 13.4 機械学習のセキュリティ 13.4.1 機械学習システムへの攻撃 13.4.2 機械学習システムのセキュリティ対策 13.5 まとめ 14章 ソフトウェア開発の現場 14.1 開発の原則やプラクティス 14.1.1 ソフトウェア開発のライフサイクル 14.1.2 ウォーターフォール型ソフトウェア開発 14.1.3 アジャイルソフトウェア開発 14.1.4 アジャイル・データサイエンス 14.2 ソフトウェア業界における役割 14.2.1 ソフトウェアエンジニア 14.2.2 テストエンジニア 14.2.3 データエンジニア 14.2.4 データアナリスト 14.2.5 プロダクトマネージャー 14.2.6 UXリサーチャー 14.2.7 デザイナー 14.3 コミュニティ 14.3.1 オープンソース 14.3.2 イベントでの講演 14.3.3 Pythonコミュニティ 14.4 まとめ 15章 さらなる飛躍を求めて 15.1 コードの未来 15.2 コードで描く未来 15.3 おわりに 索引 コラム目次 ソフトウェアエンジニアリング vs. データサイエンス 「作品」としてのコード 本書のデータ 早すぎる最適化 タブにするかスペースにするかの大論争 テスト駆動開発 コードレビュー バージョニング その他のAPIフレームワーク データの「プライバシー」