商品情報にスキップ
1 0
  • 発売日:20240912
  • 出版社:技術評論社
  • ISBN/JAN:9784297144012

読み込み中…

現場のPython──Webシステム開発から、機械学習・データ分析まで

現場のPython──Webシステム開発から、機械学習・データ分析まで

株式会社ビープラウド(著)

通常価格 3,520 円(税込)
通常価格 セール価格 3,200 円
セール 売り切れ
商品説明
『WEB+DB PRESS』の人気連載が待望の書籍化です。Webシステム開発から機械学習・データ分析まで、現場で使えるPythonのノウハウが1冊にまとまっています。取り上げる話題は、環境構築、コード品質、テスト、構造化ログ、リリース管理、Django、Django REST framework、GraphQL、Fast API、Django ORM、データサイエンスプログラムの品質、データ分析レポート、pandasのパフォーマンス改善、JanomeとSudachiPyによる日本語処理、pandasやNumPyによるテスト、数理最適化などなど。今日から仕事で活かせるヒントやテクニックがきっと見つかるです。
My店舗受け取り
最大5店舗までご登録いただけます。
  • My店舗を登録いただくと、店舗お受け取りの在庫状況を確認することができます。 (受け取り可能店舗のみ)

目次
はじめに

■■第1部 基礎編

■第1章 最新Python環境構築シンプルでコーディングしやすい環境を整える

1.1 Pythonのインストール
 インストール方法のお勧めは?
 インストーラでの導入──簡易的な導入手段
 仮想環境と標準モジュールのvenv
 仮想環境の切り替え──activate/deactivate
 Dockerイメージ──複数人開発でより扱いやすい方法

1.2 ライブラリのインストール
 とりあえず何を使えばよい?
 pip──標準かつ簡単な方法
 Poetry──より安全に管理するなら

1.3 コーディング環境を整える
 とりあえずどこまでやるべき?──最低限の品質保証
 PEP 8──コーディング規約
 black──PEP 8の自動適用
 ruff──高速なインポート順の整列とPEP 8のチェック

1.4 漸進的型付けと静的型チェック
 どこまで対応すればよいか?──とりあえずType Hintingを書く
 漸進的型付け──あとから型を付けられる
 Type Hinting
 mypy──型のチェック

1.5 開発支援ツールを一括実行──tox
 toxのインストール方法
 toxの設定例
 toxの実行と実行結果
 toxのテストを個別で実行

■第2章 型ヒントとmypyによるコード品質の向上型チェックの基本から、既存コードの改善プロセスまで

2.1 型ヒントの役割と型チェッカーの活用
 型ヒントがある場合・ない場合
 型ヒントを活用する方法

2.2 型ヒントの使い方──基本編
 変数
 関数
 ジェネリック型
 複雑な型
 クラス
 型エイリアス

2.3 型ヒントの使い方──発展編
 dataclassesモジュールを活用する
 アノテーションによる実行時のエラー回避
 スタブファイルを利用する
 既存のコードベースに型ヒントを追加する

■第3章 pytestを使って品質の高いテストを書くparametrize・フィクスチャ・pytest-covの活用

3.1 テストの品質向上のポイント
 テストコードとプロダクトコードの違い
 テストコードを書くときに必要な考え方

3.2 pytestによるテストの書き方
 テストケースの書き方
 テストケースの基本形

3.3 pytestでテストを書くときに押さえるべき基本
 1つのテストケースでは1つのことを調べる
 テスト対象のインポートはテスト関数内で行う

3.4 サンプルコードのテストを作成しよう
 ディレクトリ構成とテスト対象の概要
 開発環境のセットアップ
 素朴なテストを書く

3.5 pytestを使いこなしてテストコードを改善しよう
 parametrizeを使って繰り返すテストを書こう
 フィクスチャを使って共通処理をまとめよう
 フィクスチャの機能を適度に使いこなす

3.6 テストの品質をチェックしよう
 pytest-covを使ってカバレッジをチェックしよう
 テストコードをレビューするときのコツ

■第4章 structlogで効率的に構造化ログを出力横断的に検索や解析のしやすいログのしくみを整えよう

4.1 ログはなぜ必要なのか

4.2 構造化ログはなぜ便利なのか

4.3 Python標準モジュールのみで構造化ログを実現しよう
 基本的なログ出力
 loggingモジュールで構造化ログを出力する
 シンプルに構造化ログを実装した際の問題点

4.4 structlogでより便利に構造化ログを出力しよう
 structlogを導入して利用する
 JSON形式で構造化ログを出力する
 データバインディングして情報を追跡しやすくする

4.5 django-structlogでリクエストとレスポンスログを拡張しよう

4.6 ログを活用する
 CloudWatch Logs Insightsでログを横断的に検索する

■第5章 リリースを管理して開発効率を高めるtowncrierとGitHub Actionsによるリリースの自動化

5.1 リリースを管理しよう
 リリースを管理しないと発生する困りごと
 リリースを管理すると解決できること

5.2 リリースを管理する方法
 Changelogを手動で作成する
 towncrierでChangelogを自動更新する

5.3 GitHub Actionsでリリースを自動化する
 GitHub Actionsとは
 リリース作業を自動化するworkflowを作成する
 workflowを実行する
 workflowで作成したChangelog、Gitタグ、GitHubのリリースを確認する

■■第2部 Webシステム開発編

■第6章 Djangoアプリケーションの品質を高める単体テストと運用時の監視

6.1 Djangoとアプリケーション品質
 Django──フルスタックWebアプリケーションフレームワーク
 アプリケーションの品質

6.2 サンプルアプリケーションの作成
 仕様
 実装

6.3 標準モジュールを使った単体テスト
 実装
 実行
 単体テストを作成するための標準モジュール

6.4 単体テストを効率化するライブラリ
 pytest──高機能な単体テストフレームワーク
 unittest.mock──外部システム通信や複雑な処理をモック化
 freezegun──単体テスト実行時の時刻を簡単に指定
 factory-boy──モデルのデータ作成を効率化

6.5 運用に役立つロギングと監視
 Python標準のロギングモジュールを活用
 Sentryで監視をより効果的に

■第7章 DjangoでAPI開発初めてのDjango REST framework

7.1 Django REST framework(DRF)とは
 DjangoとDRFの違い
 DRFのインストール方法

7.2 サンプルアプリケーションの準備
 DRFの準備
 DBの準備

7.3 シリアライザ
 シリアライザの作成方法
 デシリアライズ
 バリデーションの詳細
 バリデーション済みデータのDBへの登録/更新
 シリアライズ

7.4 APIビュー
 シンプルなAPIビュー
 ジェネリックAPIビュー
 ビューセット

■第8章 Django×StrawberryによるGraphQL入門GraphQLの基礎から実際のプロダクトへの導入まで

8.1 GraphQL──自由で過不足の少ないAPI
 GraphQLのメリット
 GraphQLのスキーマを知る

8.2 Strawberryとは

8.3 Django×StrawberryでGraphQLサーバを立ち上げてみよう
 必要なパッケージをインストールしよう
 GraphQLサーバを立ち上げよう

8.4 ミューテーションの実装──カテゴリ登録APIの実装
 入力型とミューテーションを実装する
 ミューテーションをスキーマに追加する

8.5 子ノードと子孫ノードを取得しよう──リゾルバチェインズ
 リゾルバ関数
 リゾルバチェインズ
 リゾルバチェインズによる子ノードと子孫ノードの取得の実装例
 リゾルバ関数とビジネスロジックは分けよう
 リゾルバチェインズの柔軟性の代償としてのN+1問題

8.6 N+1問題とどう向き合うか──データローダパターン
 N+1問題とは
 GraphQLではなぜN+1問題が発生しがちなのか
 データローダパターンを使う
 データローダの実装方法
 データローダの制約

8.7 エラー対応──開発者用のエラーとユーザー用のエラーを使い分ける
 一般APIエラー対応
 開発者用エラーの返し方
 ユーザー用エラーの返し方

8.8 GraphQLにおけるユニットテストの考え方
 GraphQLエンジンはテスト重要度もテスト容易性も低い
 リゾルバ関数はテスト重要度が低い
 ビジネスロジックをテストしよう
 GraphQLをテストしたい場合

■第9章 FastAPIによるWeb API開発型ヒントを活用したAPI仕様中心の開発手法

9.1 FastAPIの特徴

9.2 FastAPIの開発環境をセットアップしよう
 最小限のプロジェクトを作成しよう
 最小限のプロジェクトの動作を確認しよう

9.3 API仕様とモックを作成しよう
 FastAPIによる開発の一般的な構成を理解しよう
 API仕様を決めてエンドポイントと入出力を設計しよう
 スキーマを定義しよう
 ルータを定義しよう
 生成されたドキュメントとAPIの動作を確認しよう

9.4 DBに接続する処理を追加し、API実装を完成させよう
 DB接続に必要なライブラリをセットアップしよう
 DBに接続するDependencyを作成しよう
 CRUD処理を実装しよう
 path operation関数を完成させよう
 APIの動作を確認しよう

9.5 バリデーションとエラー処理を追加しよう
 スキーマにバリデーションを追加しよう
 ルータにバリデーションを追加しよう
 HTTPException例外を使って400番台のエラーを返そう

9.6 FastAPIの強み

■第10章 Django ORMの速度改善クエリ発行の基礎、計測、チューニング

10.1 作成するサンプルアプリケーション
 Djangoアプリケーションの作成
 ダミーデータの投入

10.2 DjangoアプリケーションのSQL発行ログの確認
 簡易的にクエリを調べる
 ライブラリを使い、画面上で俯瞰して確認する──Silk

10.3 Django ORMのクエリ発行タイミング
 クエリ発行タイミングの原則──遅延実行
 クエリ発行が遅延される場合(d1) ──filterメソッドのチェイン
 クエリ発行が遅延される場合(d2)──リレーション先のオブジェクトの取得

10.4 親子モデルの情報の取得を改善する
 実行時間の計測──デコレータで特定ビューの実行時間を計測する
 子から親の情報参照──select_relatedメソッド
 親から子の情報参照──prefetch_relatedメソッド

10.5 大量レコードの作成・更新を改善する
 大量レコードの作成──bulk_createメソッド
 大量レコードの更新──bulk_updateメソッド

■第11章 Django ORMトラブルシューティングORMにまつわる問題を解決するための型を身に付けよう

11.1 ORM利用の3つの基本

11.2 SQLを確認する
 問題のあるORMクエリ例
 Django ORMのログ出力設定
 ログは現状を映す鏡

11.3 意図しないタイミングでのSQL発行を避ける
 PythonスクリプトでDjango ORMを実行
 コードを集めて処理の要点を押さえる

11.4 理想のSQLからORMを組む
 SQLを整形表示する治具を作る
 理想のSQLを考える
 現実的な時間で開発を進める

■■第3部 機械学習・データ分析編

■第12章 データサイエンスプログラムの品質改善5つのステップで製品レベルの品質へ

12.1 PoCフェーズのあとに必要なこと
 架空のシナリオについて
 品質向上のための5つのステップ

12.2 ステップ1:単体コマンドとして実行できるようにする
 一般的なディレクトリ構成にする
 実行可能コマンドを作成する
 仮想環境を作成し、ライブラリを導入する
 フォーマッター、静的チェックを実行
 プログラムを実行する

12.3 ステップ2:回帰テストを行えるようにする
 回帰テスト導入のために最低限の修正をする
 pytest-snapshotを使用して回帰テストを実現する
 回帰テストを実行する

12.4 ステップ3:パフォーマンス対策をできるようにする
 プロファイラを導入する
 Line Profilerで実行時間を計測する
 Memory Profilerでメモリ使用量を計測する
 実行速度改善のテクニック
 プログラムを書き換えたらプロファイラを再実行しよう

12.5 ステップ4:コードの可読性を向上する
 処理を関数に分割して可読性を向上する

12.6 ステップ5:コードの保守性を向上する

12.7 まとめ──限られた時間で最大の効果を

■第13章 データ分析レポートの作成JupyterLab+pandas+Plotlyでインタラクティブに

13.1 環境構築
 サンプルデータ

13.2 表にスタイルを適用する──pandasのStyling機能
 pandasのインポートとサンプルデータの読み込み
 DataFrameのStyling機能とは
 セルの値を棒グラフで表現する
 条件付き書式でセルの背景色を変更する
 1つのDataFrameに複数のスタイルを適用する
 条件付き書式で行の背景色を変更する
 すべてのスタイル変更をまとめる

13.3 動的なグラフを描画する──Plotly Express

13.4 レポートを出力する──ノートブックのHTML化

■第14章 pandasを使った処理を遅くしないテクニック4つの視点でパフォーマンス改善

14.1 なぜpandasによるデータ処理が遅くなってしまうのか

14.2 遅い機能を使わないようにしよう
 iterrowsの使用は避けよう
 DataFrameのapplyメソッドはあまり速くないことを知ろう

14.3 「Pythonの遅さ」に対処しよう
 Pythonがどれくらい遅いのかを知ろう
 なるべく列をまとめて計算しよう
 loc、where、maskを活用してPythonでの分岐を減らそう

14.4 アルゴリズムやデータ構造の効率化を考えよう
 groupbyを使って多重ループを回避しよう
 カテゴリ型を使おう

14.5 マルチコアCPUを使い切ろう
 時間がかかる処理はマルチコアを使い切れているか確認しよう
 マルチコアを使い切る方法を知ろう
 pandarallelでapplyを並列化しよう

14.6 まとめ──チューニングは必要になってから

■第15章 JanomeとSudachiPyによる日本語処理フリガナプログラム作成で学ぶ自然言語処理の流れ

15.1 日本語の処理とは
 形態素解析とは
 品詞、原形、読み
 漢字の読みの難しさ
 形態素解析の用途
 文章にフリガナを振る

15.2 Janomeで形態素解析
 Janomeとは
 Janomeをインストールして使ってみる
 Janomeでフリガナを振る
 辞書をカスタマイズする

15.3 SudachiPyで形態素解析
 SudachiPyとは
 SudachiPyをインストールして使ってみる
 SudachiPyでフリガナを振る
 さらにフリガナ処理を改善する
 ユーザー辞書をカスタマイズする
 ユーザー辞書のコストを調整する
 フリガナの漢字レベル対応

■第16章 データサイエンスのためのテスト入門pandasやNumPyのテスト機能を使って快適に実験

16.1 データサイエンスにおけるテスト
 ソフトウェア開発におけるテストとの違い
 テスト導入のステップ

16.2 仮想環境の作成

16.3 assert文による簡単なチェック
 目視確認からassert文へ
 assert文でチェックする内容とタイミング

16.4 pandasのテスト機能──pandas.testingモジュール
 DataFrameの比較──assert_frame_equal()
 Seriesの比較──assert_series_equal()

16.5 NumPyのテスト機能──numpy.testingモジュール
 NumPy配列の比較──assert_array_equal()
 浮動小数点数を持つNumPy配列の比較──assert_allclose()

16.6 Pythonモジュールに切り出し、pytestでテストの実行を自動化
 テストに向いているコード
 pytestによるテスト

■第17章 Pythonで始める数理最適化看護師のスケジュール作成で基本をマスター

17.1 数理最適化とは──数理モデルによる最適化
 数理モデルの構成要素
 数理モデルの解き方──ソルバー

17.2 ライブラリを使った数理モデルの作成
 化学製品の問題の数理モデル
 Python-MIPのメソッドやプロパティ

17.3 数理最適化で看護師のスケジュールを作成
 スケジュール作成の課題
 問題──看護師のスケジュール作成
 変数、目的関数、制約条件
 希望シフトのデータの準備と変数表の作成
 Pythonによる数理モデルの作成

17.4 StreamlitによるWebアプリケーション化
 Streamlitとは
 Streamlitを組み込む

索引
  • 発売日:20240912
  • 出版社:技術評論社
  • ISBN/JAN:9784297144012
詳細を表示する

最近チェックした商品