PYTHON FOR EMBEDDED ENGINEERING
組み込み開発のためのPythonチュートリアル
開発PCでの試験・ログ解析から、Linuxボードやマイコン周辺の通信まで。基礎を順に学び、実機の仕様と安全条件を確認しながら使える日本語ガイドです。
コード例は原則Python 3.9以降を想定しています。MicroPythonなど別実装やボード固有のAPIは、対象の公式ドキュメントで互換性を確認してください。
220レッスン24章 · サンプルコードと練習課題つき
CHAPTER / core-start
Pythonの導入と実行
Pythonの役割を知り、実行環境と最初のスクリプトを整えます。
CHAPTER / core-syntax
構文・文・出力・コメント
インデント、文の並び、出力、コメントを使って処理を明確にします。
- Pythonの構文とインデントPythonはインデントで文のまとまりを表します。同じブロックの行をそろえ、タブと空白を混在させないことが読みやすさと実行の両方に重要です。レッスンを読む →
- 文を読みやすく並べる代入、関数呼び出し、条件分岐などの文を目的ごとに分けると、処理の順序と失敗箇所を追いやすくなります。複数の処理を一行に詰め込む必要はありません。レッスンを読む →
- 値を画面へ出力するprintは人が確認する標準出力へ値を表示します。装置連携のログでは、単位や識別子を添え、出力先をデータ保存用の標準出力と診断用の標準エラーに分ける設計も有効です。レッスンを読む →
- 数値を読みやすく表示する数値の桁数や小数点以下の桁は、読み手が誤解しないよう明示します。丸めた表示値と計算に使う内部値を区別し、必要な精度を失わないようにします。レッスンを読む →
- コメントで意図を残すコメントはコードから推測できない理由や制約を記録する場所です。コードの動作を逐語的に繰り返すより、単位、通信仕様の根拠、安全上の前提などを書きます。レッスンを読む →
CHAPTER / core-variables
変数と名前の付け方
値への名前付け、複数代入、出力、グローバル状態の扱いを学びます。
- 変数に値を割り当てる変数名は値そのものではなく、オブジェクトを参照する名前です。測定値なら単位を名前や型で明確にし、異なる量を誤って比較しないようにします。レッスンを読む →
- 変数名を安全に設計する名前から意味と単位が読み取れるようにすると、レビュー時の取り違えを減らせます。予約語や曖昧な一文字名を避け、プロジェクトで一貫した命名規則を使います。レッスンを読む →
- 複数の値を代入する複数代入やアンパックは、決まった順序の値を一度に受け取るのに便利です。受け取る値の個数と順序が契約に合うか検証し、曖昧なデータを無理に展開しないでください。レッスンを読む →
- 変数の値を確認するデバッグ用の表示では、名前、単位、対象機器を併記すると誤読しにくくなります。秘密情報や個人情報をログへ出さないよう、出力前に内容を確認します。レッスンを読む →
- グローバル変数とスコープグローバル状態は、関数の入力と出力を見えにくくし、試験の独立性を下げます。必要な値は引数として渡し、状態を共有する理由がある場合だけ明示的に設計します。レッスンを読む →
CHAPTER / core-types
データ型・数値・型変換
値の型、数値演算、明示的な変換と入力検証を扱います。
- Pythonのデータ型を理解するint、float、str、bool、list、tuple、dictなどは値の扱い方を決めます。外部データを受け取ったら型を確認し、暗黙の変換に依存しない設計にします。レッスンを読む →
- 整数と浮動小数点数を使う整数はカウンターやビット値に、浮動小数点数は連続量の近似計算に使われます。浮動小数点数は有限精度なので、等値比較や境界判定では誤差を考慮します。レッスンを読む →
- 型を明示的に変換するintやfloatなどの変換は表現形式を変えますが、範囲外の値や不正な文字列を自動的に正しい測定値へ直すものではありません。変換失敗と仕様上の範囲外を分けて報告します。レッスンを読む →
CHAPTER / core-strings
文字列とテキスト処理
文字列の参照・加工・連結・書式化・エスケープとメソッドを学びます。
- 文字列を作成して扱う文字列はUnicodeテキストを表します。プロトコルの生バイトを文字列だと決めつけず、仕様で定められた文字コードでデコードしてから処理します。レッスンを読む →
- 文字列の一部を取り出すスライスは開始位置を含み終了位置を含まない範囲を取り出します。文字列の添字はバイト位置ではなく文字位置であり、固定長バイナリ形式の切り出しには使えません。レッスンを読む →
- 文字列を検索・置換する文字列は不変オブジェクトです。replaceなどは新しい文字列を返すため、戻り値を使う必要があります。装置IDの置換では、意図しない部分一致が起きないか確認します。レッスンを読む →
- 複数の文字列を結合する短い表示にはf文字列が読みやすく、多数の断片を繰り返し結合する場合はjoinが効率的です。区切り文字や改行を明示し、解析可能なログ形式を保ちます。レッスンを読む →
- f文字列で値を整形するf文字列は値の埋め込みと幅・精度の指定を同じ場所に記述できます。表示を丸めても元データは変わらない点を理解し、出力形式を試験で固定します。レッスンを読む →
- エスケープ文字を扱う改行やタブなどのエスケープは表示形式を作る一方、実データに含まれる制御文字はログの偽装や誤解析につながります。外部入力をログへ出す前に安全な表現へ変換します。レッスンを読む →
- 文字列メソッドを使い分けるstrip、split、startswithなどのメソッドは入力の整形に役立ちます。splitの結果が期待する個数かを検証し、欠損フィールドを黙って受け入れないようにします。レッスンを読む →
CHAPTER / core-booleans-operators
真偽値と演算子
真偽値、算術・比較・論理・所属・同一性・ビット演算を扱います。
- 真偽値を判定するboolはTrueまたはFalseを表します。空の値やゼロが偽として扱われる規則は便利ですが、通信仕様の0と未設定値を同一視しないようにします。レッスンを読む →
- 演算子と評価順序演算子は値の計算や条件判定を表します。複雑な式は括弧を使って意図を示し、評価順序への思い込みを避けます。レッスンを読む →
- 算術演算を使う加減乗除、整数除算、剰余、累乗は数値を変換します。単位の異なる値を混ぜず、ゼロ除算や整数除算による切り捨てを考慮します。レッスンを読む →
- 複合代入を使う+=などの複合代入は更新を短く表します。変更可能オブジェクトの場合は元のオブジェクト自体が変更されることがあるため、参照共有を考えて使います。レッスンを読む →
- 条件式で値を選ぶ条件式は単純な二者択一を一行で表します。複数段に重ねると読みにくくなるため、複雑な状態遷移は通常のif文にします。レッスンを読む →
- 比較演算子で範囲を検査する比較演算子は値の大小や一致を判定します。連鎖比較は範囲判定を簡潔に書けますが、単位や境界値の包含を仕様に合わせます。レッスンを読む →
- 論理演算子で条件を組み合わせるand、or、notは条件を組み合わせ、短絡評価を行います。関数呼び出しを条件式に埋め込む場合は、評価されない枝がある点を踏まえて副作用を避けます。レッスンを読む →
- 同一性を判定するisは二つの名前が同じオブジェクトを参照するかを判定します。値が等しいかの比較には==を使い、Noneとの比較には慣例としてis Noneを使います。レッスンを読む →
- 所属演算子で含有を調べるinとnot inは要素がコレクションに含まれるかを調べます。辞書ではキーの所属を判定し、値の所属を確認したい場合はvaluesを使います。レッスンを読む →
- ビット演算でフラグを扱うビット演算はレジスターのフラグ抽出や設定に使われます。Python整数は任意精度なので、ハードウェア幅をマスクし、符号付き値の解釈を仕様に合わせます。レッスンを読む →
- 演算子の優先順位を読む優先順位によって括弧なしの式の意味が決まります。レビューで誤読されそうな式は括弧を使い、条件とビットマスクを分けて記述します。レッスンを読む →
CHAPTER / core-lists
リスト
順序付きで変更可能なリストの参照、更新、反復、並べ替えを学びます。
- リストを作成するリストは順序を保ち、要素を追加・削除・置換できるコレクションです。同じ種類の測定値を並べる用途に向きますが、件数や単位も管理します。レッスンを読む →
- リストの要素へアクセスする添字は0から始まり、負の添字は末尾から数えます。外部から受け取った添字は範囲確認を行い、空リストへの参照でIndexErrorを起こさないようにします。レッスンを読む →
- リストの要素を変更する添字への代入は既存要素を置き換えます。スライス代入は複数要素を変更できるため、対象範囲と期待件数を試験して意図しない長さ変更を防ぎます。レッスンを読む →
- リストへ要素を追加するappendは末尾へ一要素を追加し、extendは複数要素を追加します。通信の読み出し単位とリストへ追加する単位を区別してください。レッスンを読む →
- リストから要素を削除するremoveは値を指定し、popは位置を指定して要素を取り出します。存在しない値や空リストに対する動作を設計し、削除前に必要な記録を残します。レッスンを読む →
- リストを順番に処理するfor文で要素を順に読むときは、必要ならenumerateで位置も取得します。反復中に同じリストから削除すると要素を飛ばすことがあるため、別のリストを作る方法を検討します。レッスンを読む →
- リスト内包表記で変換する内包表記は各要素の変換や明確な条件での絞り込みを簡潔に表します。副作用や複数段の複雑な処理は通常のループに分けます。レッスンを読む →
- リストを並べ替えるsortはリスト自体を変更し、sortedは新しいリストを返します。タイムスタンプと測定値の対応を壊さないよう、レコード単位で並べ替えキーを指定します。レッスンを読む →
- リストをコピーする代入はリストのコピーではなく同じオブジェクトへの別名を作ります。浅いコピーでは内側の変更可能要素が共有されるため、必要なコピー深度を決めます。レッスンを読む →
- 複数のリストを結合する連結演算子やextendでリストを結合できます。繰り返しの+は新しいリストを何度も作るため、大量データではappendやextendを検討します。レッスンを読む →
- リストのメソッドを使うappend、extend、insert、remove、pop、clear、index、count、sort、reverseなどは異なる変更を行います。戻り値がNoneのメソッドもあり、代入して結果を失わないようにします。レッスンを読む →
CHAPTER / core-tuples-sets-dicts
タプル・集合・辞書
固定的な組、重複を除く集合、キーと値の対応表を使い分けます。
- タプルを作成するタプルは順序を保つ組で、要素の追加や置換をしません。固定の座標や関数の複数戻り値に使えますが、内部に変更可能な値があればその値は変更できます。レッスンを読む →
- タプルの要素を参照するタプルの添字やスライスはリストと同様に使えます。戻り値の位置に依存するコードは読みづらくなるため、必要なら名前付きデータ構造を選びます。レッスンを読む →
- タプルの値を置き換える設計タプル自体は変更できません。変更が必要なら新しいタプルを作るか、変更可能なリストを使い、固定データとして扱うべき値を誤って変更しない設計にします。レッスンを読む →
- タプルをアンパックするアンパックは順序付きの複数値を個別の名前へ割り当てます。値の個数が合わない場合はエラーになるため、可変長データには明示した形式を使います。レッスンを読む →
- タプルを反復するタプルはfor文で順番に走査できます。対応関係を保つ複数の列をzipでまとめる場合は、長さが異なる入力を検出する方法も検討してください。レッスンを読む →
- タプルを連結する+でタプルを連結すると新しいタプルが作られます。固定長データを組み立てるときは、フィールド順と型を仕様に合わせて記録します。レッスンを読む →
- タプルのメソッドを使うタプルには主に要素数を数えるcountと位置を探すindexがあります。値が見つからない場合の例外を想定し、存在確認を先に行う方法と比較します。レッスンを読む →
- 集合を作成する集合は重複しない要素を保持します。順序は保証されないため表示順が必要な場合はソートし、要素にできる値がハッシュ可能であることを確認します。レッスンを読む →
- 集合に値が含まれるか調べる集合はinによる所属判定に適していますが、添字によるアクセスはできません。表示順や個別の位置が必要なデータ構造とは使い分けます。レッスンを読む →
- 集合へ値を追加するaddは一要素、updateは複数の要素を集合へ追加します。重複は自動的に一つになりますが、何回観測されたかという回数情報は失われます。レッスンを読む →
- 集合から値を取り除くremoveは存在しない要素でKeyErrorになり、discardはその場合も何もしません。入力の異常を見つけたいのか、冪等な削除をしたいのかで選びます。レッスンを読む →
- 集合を反復する集合の反復順は一定とは限りません。決定的なログやテスト結果が必要ならsortedで順序を固定します。レッスンを読む →
- 集合の和・積・差を求める和集合、積集合、差集合は許可一覧や検出一覧の比較に役立ちます。左右の意味を明示し、結果をどちらの基準で解釈するか記録します。レッスンを読む →
- 変更できない集合を使うfrozensetは要素を追加・削除できない集合で、辞書のキーや別の集合の要素にできます。構成値を固定したい場合に使い、可変集合との違いを意識します。レッスンを読む →
- 集合のメソッドを使い分けるunion、intersection、difference、symmetric_differenceや更新系メソッドは集合を比較・変更します。破壊的更新か新しい集合を返すかを確認します。レッスンを読む →
- 辞書を作成する辞書はキーと値の対応を保持します。装置設定や名前付き測定値に使えますが、必須項目、値の型、キーの重複を検証します。レッスンを読む →
- 辞書の値を取り出すキーによる参照はキーがなければKeyErrorになります。getは既定値を返しますが、設定漏れを隠す危険もあるため、必須項目では明示的に検証します。レッスンを読む →
- 辞書の値を変更する既存キーへの代入は値を置き換えます。設定更新では、元値、変更理由、適用後の有効値を追跡すると誤設定を調べやすくなります。レッスンを読む →
- 辞書へ項目を追加する新しいキーへの代入やupdateで項目を追加できます。外部設定を統合するときは、既定値と利用者指定値の優先順位を決めます。レッスンを読む →
- 辞書から項目を削除するdelやpopはキーを削除し、popは削除値も返します。設定削除で必須項目が失われないよう、変更後の辞書を再検証します。レッスンを読む →
- 辞書のキーと値を反復するitemsはキーと値を同時に取り出せます。Pythonの辞書は挿入順を保持しますが、外部フォーマットの順序要件は別途確認します。レッスンを読む →
- 辞書をコピーする辞書のcopyは浅いコピーです。入れ子のリストや辞書は共有されたままなので、独立した設定スナップショットが必要ならコピー方法を選びます。レッスンを読む →
- 入れ子の辞書を扱う辞書の中に辞書を置くと機器ごとの設定を表せます。階層が深くなると欠落キー処理が難しくなるため、検証関数やデータクラスとの比較を行います。レッスンを読む →
- 辞書のメソッドを使うkeys、values、items、get、setdefault、update、popなどは異なる変更・参照をします。ビューは元辞書の変更を反映するため、必要ならリスト化します。レッスンを読む →
CHAPTER / core-control-flow
条件分岐と繰り返し
条件・match・while・forを用いて状態に応じた処理と反復を設計します。
- if・elif・elseで分岐する条件分岐は測定値や機器状態に応じて処理を選びます。範囲の境界を明示し、想定外の状態にも安全な既定動作を定めます。レッスンを読む →
- 複数の条件を順番に評価するelifは上から順に条件を評価し、最初に真になった枝だけを実行します。条件の順序で結果が変わるため、範囲が重ならないか確認します。レッスンを読む →
- elseで代替経路を示すelseは先行条件のどれにも一致しない場合の処理です。未知の状態を正常として扱わず、診断可能なエラーや安全側の動作を選びます。レッスンを読む →
- 短い条件分岐を読みやすく書く単純な値の選択には条件式を使えます。条件や結果が複雑な場合、また副作用がある場合は通常のif文に分けて読みやすくします。レッスンを読む →
- 論理条件を組み合わせる複数の条件で分岐するときは、and・orの意味と短絡評価を確認します。安全条件の一部が評価されない書き方を避け、判定要素を名前付き変数へ分けます。レッスンを読む →
- 入れ子の条件を設計する入れ子のifは段階的な判定に使えますが、深くなると経路の網羅性が下がります。早期returnや小さな関数で複雑さを抑えます。レッスンを読む →
- passで未実装の枝を明示するpassは何もしない文です。構文上ブロックが必要な場所で使えますが、異常状態を黙って無視する目的には使わず、未実装箇所を管理します。レッスンを読む →
- matchで状態パターンを分岐するmatchは値のパターンに応じた分岐を表せます。Pythonの版を確認し、未対応環境ではif文に置き換える方法も用意します。レッスンを読む →
- whileループを安全に使うwhileは条件が真の間処理を繰り返します。条件が変わらない場合に永久ループとなるため、タイムアウト、停止イベント、最大回数を設けます。レッスンを読む →
- forループで要素を処理するforは反復可能な値から要素を順に取得します。回数を数えるだけならrange、位置も必要ならenumerateを使い、反復中のコレクション変更を避けます。レッスンを読む →
CHAPTER / core-functions-runtime
関数・反復・標準ライブラリ
関数の引数、スコープ、ジェネレーター、主要な標準機能を順に扱います。
- 関数を定義する関数は名前付きの処理単位で、入力と戻り値を通じて役割を示します。通信やファイル操作から計算部分を分離すると、ハードウェアなしで試験しやすくなります。レッスンを読む →
- 関数の引数を設計する位置引数とキーワード引数を適切に使うと、呼び出し側の意図が明確になります。必須値と省略可能値を区別し、入力の単位や許容範囲を検証します。レッスンを読む →
- *argsと**kwargsを理解する*argsは余分な位置引数をタプルへ、**kwargsはキーワード引数を辞書へまとめます。柔軟すぎるAPIは誤入力を見逃すため、必要な場合だけ使用します。レッスンを読む →
- 変数のスコープを理解するローカル、外側、グローバルなどのスコープ規則が名前の参照先を決めます。関数内から外部状態を書き換えるより、引数と戻り値で依存関係を表す方が試験しやすくなります。レッスンを読む →
- デコレーターで関数を拡張するデコレーターは関数を受け取り、機能を追加した関数を返します。ログや計測の共通化に使えますが、隠れた副作用や例外変換を増やさないようにします。レッスンを読む →
- lambda式を使うlambdaは単一の式からなる短い関数です。sortのkeyなど短い用途に適しますが、複数条件や副作用がある処理はdefで名前を付けます。レッスンを読む →
- 再帰処理の停止条件を作る再帰関数は自分自身を呼び出し、基底条件で停止します。入力が深いと再帰上限やスタックを消費するため、反復処理への置換も検討します。レッスンを読む →
- ジェネレーターで逐次処理するyieldは値を一つずつ生成し、大きなファイルを一度にメモリへ載せずに処理できます。例外が起きた行番号を記録し、未処理データを黙って捨てない設計にします。レッスンを読む →
- rangeで数値の列を作るrangeは終了値を含まない整数列を表します。範囲外添字を作らないよう、開始・終了・刻み幅を確認し、空の範囲も試験します。レッスンを読む →
- arrayで同型の数値列を扱うarrayモジュールは基本型の同じ値をコンパクトに保持できます。NumPy配列とは機能や依存関係が異なるため、必要な操作と対象環境を確認して選びます。レッスンを読む →
- イテレーターの仕組みを知るイテレーターは次の値を順に返し、値が尽きるとStopIterationで終了します。一度使い切ると再利用できないことがあるため、再走査が必要なら新しく作ります。レッスンを読む →
- モジュールを読み込んで分割するモジュールはPythonファイルを再利用可能な単位として読み込みます。実行時に使う環境、名前の衝突、循環importを避け、公開APIを限定します。レッスンを読む →
- 日付と時刻を扱うdatetimeは日付・時刻・時間差を表します。ログではタイムゾーン、単調増加時計、保存形式を決め、機器時刻とPC時刻のずれを考慮します。レッスンを読む →
- math関数で数値を計算するmathには平方根、三角関数、丸めなどの数学関数があります。入力範囲、浮動小数点誤差、単位を確認し、計算結果が有限か検証します。レッスンを読む →
- JSONを読み書きするJSONは設定や記録の交換に使えます。読み込んだ値の型・必須キー・範囲を検証し、秘密情報を含む設定を不用意に出力しないようにします。レッスンを読む →
- 正規表現で文字列を検査する正規表現はログ形式や識別子のパターンを検査できます。複雑な式は保守しにくく、信頼できないパターンは処理時間を増やすため、長さや形式を制限します。レッスンを読む →
- pipでパッケージを管理するpipはPythonパッケージをインストール・更新します。実行環境を確認してから導入し、版・配布元・ライセンス・脆弱性対応をプロジェクトで管理します。レッスンを読む →
- 例外を捕捉して回復する例外は予期しない状態を呼び出し元へ伝えます。捕捉する型を限定し、再試行できる失敗と停止すべき失敗を区別して原因を記録します。レッスンを読む →
- 書式指定で出力を統一する書式指定は固定桁数の表示や数値の基数変換に使えます。画面表示用の整形と、再読込するファイル形式は分けて設計し、ロケール差の影響を避けます。レッスンを読む →
- Noneで値がない状態を表すNoneは値が存在しないことを表します。0、空文字、Falseとは異なるため、必要ならis Noneで明示的に判定します。レッスンを読む →
- 利用者からの入力を受け取るinputは文字列を返します。入力を数値やコマンドとして使う前に検証し、装置を動かす操作では対象確認、許可範囲、取り消し手順を設けます。レッスンを読む →
- 仮想環境で依存関係を分ける仮想環境はプロジェクトごとにパッケージを分離します。環境ディレクトリ自体ではなく、再作成方法と依存一覧を共有し、開発PCとボードの依存を分けます。レッスンを読む →
CHAPTER / core-oop
クラスとオブジェクト指向
クラス、属性、メソッド、特殊メソッド、継承と多態性を扱います。
- オブジェクト指向の考え方オブジェクト指向は状態と操作をまとめ、データの不変条件を守る設計手法です。すべてをクラス化せず、責務の境界が明確な場合に使います。レッスンを読む →
- クラスとインスタンスを作るクラスはオブジェクトの構造と振る舞いを定義し、インスタンスはその具体的な状態を持ちます。初期化時に必須条件を検証します。レッスンを読む →
- __init__で初期状態を作る__init__はインスタンス初期化時に呼ばれます。生成直後から有効な状態を保ち、後から必須属性がないオブジェクトにならないようにします。レッスンを読む →
- selfでインスタンスを参照するインスタンスメソッドの第一引数selfは、そのメソッドを呼び出したインスタンスを参照します。メソッドからどの状態が読まれ、変更されるか明確にします。レッスンを読む →
- プロパティで属性へのアクセスを管理するpropertyは属性の読み書き時に検証や計算を行えます。単純なフィールドを不要に隠さず、公開APIとして必要な場合に導入します。レッスンを読む →
- インスタンス・クラス・静的メソッドを使うインスタンスメソッドは個別状態、クラスメソッドはクラス全体、静的メソッドは関連する処理を表します。用途に合う呼び出し形式を選びます。レッスンを読む →
- 特殊メソッドで標準操作を定義する特殊メソッドはlen、比較、表示などPythonの標準操作に応答します。必要な操作だけ実装し、等価性やハッシュの契約を崩さないようにします。レッスンを読む →
- __str__で人向け表示を定義する__str__はprintなどで使う読みやすい表示を返します。診断ログには単位や識別子を含め、秘密情報を出さないようにします。レッスンを読む →
- __repr__で開発者向け表示を定義する__repr__はデバッグに役立つ曖昧さの少ない表現を目指します。復元可能な形式が常に安全とは限らないため、秘密や大きなデータを含めません。レッスンを読む →
- __eq__で等価性を定義する__eq__は二つのオブジェクトが同じ値を表すかを決めます。比較に使うフィールドと異なる型への応答を定め、可変オブジェクトのハッシュ規則に注意します。レッスンを読む →
- __add__で加算の意味を定義する__add__を実装すると+の意味を独自に定義できます。物理量では単位や次元が合わない加算を拒否し、変更しない計算として扱うか決めます。レッスンを読む →
- __len__で要素数を返す__len__はオブジェクトの長さを整数で返します。件数0を偽として扱うコードがあるため、空状態とオブジェクトの存在を区別します。レッスンを読む →
- __lt__で順序を定義する__lt__は<による順序を定義します。比較可能な単位・フィールドを選び、等しい場合の挙動やソート時の一貫性を確認します。レッスンを読む →
- __contains__で所属判定を定義する__contains__はin演算子の動作を定義します。検索対象や一致条件を明確にし、必要以上に高コストな検索を隠さないようにします。レッスンを読む →
- __call__でインスタンスを呼び出し可能にする__call__を実装するとインスタンスを関数のように呼べます。設定状態を持つ変換器などに使えますが、呼び出し結果が分かる名前と説明を付けます。レッスンを読む →
- 継承で共通処理を拡張する継承は基底クラスの振る舞いを派生クラスへ引き継ぎます。実装の再利用だけが目的なら合成の方が疎結合になる場合があり、置換可能性を確認します。レッスンを読む →
- 多態性で実装を切り替える多態性は同じ操作名を異なる実装に適用する考え方です。共通の契約と例外動作を定め、呼び出し側が具体クラスに依存しないようにします。レッスンを読む →
- カプセル化で不変条件を守るカプセル化は内部状態の変更経路を制限し、オブジェクトの整合性を保ちます。Pythonのアンダースコアはアクセス禁止機構ではないため、公開APIと規約を明確にします。レッスンを読む →
- 内部クラスを使う場面を判断するクラス内に定義したクラスは名前空間を整理できますが、自動的に外側インスタンスへ結び付くわけではありません。単純な補助データなら別クラスやdataclassも検討します。レッスンを読む →
CHAPTER / core-files
ファイルの読み書きと削除
ファイルを安全に開き、読み取り・書き込み・削除を行います。
- ファイルを扱う基本ファイル操作ではパス、モード、文字コード、エラー処理を決めます。with文を使うと例外時もファイルが閉じられ、書き込み先の権限や容量も確認できます。レッスンを読む →
- ファイルを読み込むreadは全体、readlineは一行、反復処理は逐次読込に使えます。巨大ログを一度に読み込まず、空行や不正行をどう報告するか定めます。レッスンを読む →
- ファイルへ書き込み新規作成する書き込みモードは既存内容を切り詰め、追記モードは末尾へ追加します。誤ったパスで重要ファイルを消さないよう、対象を限定し、必要なら一時ファイルから置換します。レッスンを読む →
- ファイルを削除する削除は取り消しにくい操作です。対象パスを解決して許可ディレクトリ内か確認し、存在しない場合や権限不足を明示的に扱います。レッスンを読む →
CHAPTER / python-machine-learning
機械学習の基礎
データの要約・可視化から、モデルの学習・評価までを学びます。
- 機械学習を始める機械学習はデータから規則を学び、未知の入力を予測する手法です。目的変数、特徴量、評価方法を定め、まず単純な基準値と比較します。レッスンを読む →
- 平均・中央値・最頻値を求める平均は合計を件数で割った値、中央値は並べたときの中央、最頻値は最も多い値です。外れ値の影響や複数の最頻値に注意して使い分けます。レッスンを読む →
- 標準偏差でばらつきを測る標準偏差はデータが平均の周りにどの程度散らばるかを示します。標本と母集団では分母が異なるため、どちらを計算するか明示します。レッスンを読む →
- パーセンタイルを読み取るパーセンタイルは指定した割合のデータがそれ以下となる境界の目安です。補間方法により結果が異なるため、使用する実装と定義を記録します。レッスンを読む →
- データ分布を観察する分布を可視化すると、偏り、複数の山、異常値、計測範囲の切り詰めを見つけやすくなります。ビン幅や標本数を添えて解釈します。レッスンを読む →
- 正規分布の仮定を確認する正規分布は左右対称の連続分布モデルです。測定値が正規分布に従うとは限らず、ヒストグラムやQ-Qプロットと領域知識で仮定を評価します。レッスンを読む →
- 散布図で二つの変数を調べる散布図は二つの量の対応や外れた観測を可視化します。相関が見えても因果関係を意味せず、軸の単位や時間順序も確認します。レッスンを読む →
- 線形回帰で傾向を近似する線形回帰は特徴量と目的値の線形な関係を係数で表します。外挿は危険であり、残差と基準モデルを確認します。レッスンを読む →
- 多項式回帰で曲線を近似する多項式特徴量を線形回帰へ渡すと曲線を近似できます。次数を上げすぎると過学習や数値不安定性が起きるため、検証データで比較します。レッスンを読む →
- 複数の特徴量で回帰する重回帰は複数の特徴量を使って目的値を近似します。特徴量間の相関、単位差、欠損、学習範囲外の入力に注意します。レッスンを読む →
- 特徴量のスケールをそろえる標準化などのスケーリングは、距離や勾配に敏感なモデルを助けます。変換器は学習データだけでfitし、テストデータにはtransformだけを行います。レッスンを読む →
- 学習データとテストデータを分けるテストデータを最後の評価まで保留すると、未知データへの性能を見積もりやすくなります。時系列や同一装置の反復測定では、無作為分割が漏えいを招く場合があります。レッスンを読む →
- 決定木で分類・回帰する決定木は特徴量の条件分岐を積み重ねます。深さを制限しない木は訓練データを記憶しやすいため、深さや葉の最小件数を検証します。レッスンを読む →
- 混同行列で分類結果を分析する混同行列は正解ラベルと予測ラベルの組合せ数を示します。クラス不均衡では正解率だけでは性能を判断できないため、適合率や再現率も確認します。レッスンを読む →
- 階層的クラスタリングを行う階層的クラスタリングはデータ点間の距離から段階的なまとまりを作ります。特徴量の尺度、距離尺度、連結方法を変えると結果が変わります。レッスンを読む →
- ロジスティック回帰で分類するロジスティック回帰は分類確率を推定する線形モデルです。閾値やクラス重みで誤検出と見逃しのバランスが変わります。レッスンを読む →
- グリッドサーチで設定を比較するグリッドサーチは指定したハイパーパラメーターの組合せを交差検証で評価します。探索範囲を広げすぎず、最終テストデータを探索に使わないでください。レッスンを読む →
- カテゴリーデータを前処理する文字列カテゴリはモデルに渡せる数値表現へ変換します。学習時にないカテゴリや欠損値の扱いを決め、前処理を学習パイプラインへ組み込みます。レッスンを読む →
- バギングで複数モデルを組み合わせるバギングは標本を変えて複数のモデルを学習し、予測を集約します。計算量と説明可能性も比較し、単一モデルより有効か検証します。レッスンを読む →
- 交差検証で性能を評価する交差検証はデータの異なる分割で学習・評価を繰り返します。グループや時系列の構造があるデータには適切な分割器を選びます。レッスンを読む →
- ROC曲線とAUCを読むROC曲線は判定しきい値ごとの真陽性率と偽陽性率を示し、AUCは順位付け性能の要約です。クラス不均衡時には適合率・再現率も併記します。レッスンを読む →
- k近傍法で近いデータから分類するk近傍法は距離の近い標本のラベルから予測します。特徴量の尺度、近傍数、同距離の扱いが結果に影響します。レッスンを読む →
CHAPTER / python-data-structures-algorithms
データ構造とアルゴリズム
探索・整列と、代表的なデータ構造の基本的な性質を学びます。
- データ構造とアルゴリズムの考え方データ構造はデータの保持方法、アルゴリズムは処理手順です。入力件数、検索頻度、更新頻度、メモリ制約から適した組合せを選びます。レッスンを読む →
- 配列とリストを使うPythonのlistは動的な配列として機能し、末尾への追加は償却定数時間、途中挿入は要素移動を伴います。固定幅データには専用配列型も検討します。レッスンを読む →
- スタックを実装するスタックは後入れ先出しの構造です。Pythonのlistのappendとpopを末尾側で使うと、簡潔にスタックを表現できます。レッスンを読む →
- キューを実装するキューは先入れ先出しの構造です。listの先頭popは要素移動が必要なため、両端操作にはcollections.dequeを使います。レッスンを読む →
- 連結リストの仕組みを理解する連結リストはノードが次のノードを参照する構造です。先頭への追加は容易ですが、位置検索には逐次走査が必要で、Pythonではlistが実用的な場合も多くあります。レッスンを読む →
- ハッシュテーブルで検索する辞書や集合はハッシュテーブルを基盤に平均的に高速な検索を行います。キーはハッシュ可能である必要があり、衝突や最悪ケースも理論上考慮します。レッスンを読む →
- 木構造を理解する木構造は親子関係を持つノードでデータを表します。階層設定や構文解析に利用され、探索方法と木の高さが処理コストに影響します。レッスンを読む →
- 二分木をたどる二分木では各ノードが最大二つの子を持ちます。前順・中順・後順の走査順を理解し、深い木では再帰深度の上限も考慮します。レッスンを読む →
- 二分探索木を扱う二分探索木は左部分木と右部分木へ大小関係を保ちます。挿入順によって木が偏ると探索が遅くなるため、平衡化構造との違いを理解します。レッスンを読む →
- AVL木の平衡化を学ぶAVL木は部分木の高さ差を制限する自己平衡二分探索木です。回転によって高さを保ちますが、実装の境界条件を十分に試験する必要があります。レッスンを読む →
- グラフで接続関係を表すグラフは頂点と辺で接続関係を表し、有向・無向、重み付きなどの種類があります。隣接リストは疎なグラフの保存に向きます。レッスンを読む →
- 線形探索を行う線形探索は先頭から順に比較し、整列不要でO(n)時間を要します。小規模データでは単純さが利点となる場合があります。レッスンを読む →
- 二分探索を行う二分探索は整列済み配列を半分ずつ絞り込み、O(log n)時間で探索します。入力が同じ順序で整列されていることが前提です。レッスンを読む →
- バブルソートを理解するバブルソートは隣り合う要素を比較して交換する方法です。平均・最悪時O(n²)で、大規模データには標準のsortedを使うのが一般的です。レッスンを読む →
- 選択ソートを理解する選択ソートは未整列部分から最小値を探して先頭と交換します。比較回数はO(n²)で、書き込み回数が少ない特性があります。レッスンを読む →
- 挿入ソートを理解する挿入ソートは整列済み部分へ次の要素を挿入します。小規模またはほぼ整列済みデータでは有用ですが、逆順入力ではO(n²)となります。レッスンを読む →
- クイックソートを理解するクイックソートは基準値で配列を分割する分割統治法です。平均O(n log n)ですが、基準選択によって最悪O(n²)となり、再帰深度にも注意が必要です。レッスンを読む →
- カウンティングソートを理解するカウンティングソートは値の出現数を数え、値域が狭い整数の整列に使えます。メモリ量は最大値と最小値の差に依存します。レッスンを読む →
- 基数ソートを理解する基数ソートは桁ごとに安定な整列を繰り返す方法です。対象値の表現、負数、基数、各段階の安定性を定めます。レッスンを読む →
- マージソートを理解するマージソートは分割した配列を整列しながら統合するO(n log n)の方法です。安定性を保ちやすい一方、追加メモリが必要です。レッスンを読む →
CHAPTER / python-mysql
PythonとMySQL
コネクターを介してMySQLへ接続し、データベースと表を安全に扱います。
- PythonからMySQLへ接続するMySQL Connector/PythonはPythonプログラムからMySQLへ接続する公式ドライバーです。接続失敗、TLS設定、接続資源の解放を明示します。レッスンを読む →
- データベースを作成するCREATE DATABASEで保存領域を用意します。アプリケーション接続ユーザーに管理者権限を与えず、文字コードと照合順序を用途に合わせます。レッスンを読む →
- データベースに表を作るCREATE TABLEで列の型、主キー、制約を定義します。測定単位、時刻、NULL許可、インデックスをデータの使い方に合わせて設計します。レッスンを読む →
- MySQLへデータを追加するINSERT文で行を追加し、値をSQLへ文字列連結せずパラメーターとして渡します。複数行の追加にはトランザクションと失敗時のrollbackを設けます。レッスンを読む →
- MySQLからデータを取得するSELECTで必要な列を指定して取得します。大量データを無制限に読み出さず、結果件数やストリーミング方法を考慮します。レッスンを読む →
- WHEREで行を絞り込むWHEREは条件に合う行を選びます。条件値はプレースホルダーで渡し、NULL判定や日時範囲をSQLの規則に合わせます。レッスンを読む →
- ORDER BYで検索結果を並べるORDER BYは昇順・降順で結果を整列します。同一値の順序が必要なら一意な列を追加し、ページング結果を安定させます。レッスンを読む →
- 条件を指定して行を削除するDELETEは条件に一致する行を消します。WHEREのない削除を避け、対象件数を確認し、トランザクション内でcommit前に影響を検証します。レッスンを読む →
- 表を削除する危険性を理解するDROP TABLEは表定義と保存データを削除する破壊的操作です。通常のアプリケーション処理に置かず、バックアップ・環境確認・承認を伴う管理作業として扱います。レッスンを読む →
- UPDATEで行を更新するUPDATEはWHERE条件に一致する行を書き換えます。条件漏れを防ぎ、変更前後の値と対象件数をトランザクションで確認します。レッスンを読む →
- LIMITで取得件数を制限するLIMITは結果行数を制限し、ログ閲覧などで負荷を抑えます。ページングの順序は決定的にし、LIMITとOFFSETを外部入力から受ける際に検証します。レッスンを読む →
- JOINで複数の表を結合するJOINは関連する表の行をキーで結びます。結合キーの一意性やNULL、重複による行数増加を確認し、必要な列だけ選びます。レッスンを読む →
CHAPTER / python-mongodb
PythonとMongoDB
PyMongoを使ってMongoDBへ接続し、コレクション内の文書を検索・更新します。
- PythonからMongoDBへ接続するPyMongoはPythonのMongoDBドライバーです。接続先や認証情報を安全に設定し、サーバーのTLS・認証・ネットワーク制限を確認します。レッスンを読む →
- MongoDBデータベースを選ぶMongoDBのデータベースは通常、最初の文書が保存されるまで実体化しません。名前を選ぶだけで作成済みだと考えず、権限と初期化手順を確認します。レッスンを読む →
- コレクションを用意するコレクションは文書をまとめる単位です。必要に応じてバリデーターや一意インデックスを設定し、文書の形とサイズ上限を決めます。レッスンを読む →
- MongoDBへ文書を追加するinsert_oneやinsert_manyで文書を追加できます。識別子や日時、測定単位の形式を統一し、再試行時の重複挿入も考慮します。レッスンを読む →
- MongoDBから文書を検索するfind_oneは一件、findは条件に合うカーソルを返します。大量取得では投影、順序、件数制限を使い、カーソルを逐次処理します。レッスンを読む →
- 条件式でMongoDBを検索するMongoDBのクエリ演算子で範囲・存在・論理条件を指定します。利用者入力から任意のクエリ演算子を受け取らず、許可する条件を組み立てます。レッスンを読む →
- MongoDBの検索結果を並べるsortとlimitを組み合わせ、必要な順序と件数を指定します。同値の順序が不定にならないよう、一意キーを追加します。レッスンを読む →
- MongoDBの文書を削除するdelete_one・delete_manyは一致する文書を削除します。条件のない一括削除を避け、削除対象を先に検索して件数を確認します。レッスンを読む →
- コレクション削除の影響を確認するdropはコレクション全体とそのインデックスを削除する破壊的操作です。通常の利用経路から分離し、環境・バックアップ・承認を確認します。レッスンを読む →
- MongoDBの文書を更新するupdate_oneやupdate_manyで演算子を使って更新します。条件が意図した件数に一致するかを確認し、置換更新と部分更新を区別します。レッスンを読む →
- MongoDBの結果件数を制限するlimitは取得件数を制限し、sortやインデックスと組み合わせると負荷を制御できます。ページングでは安定した順序と次の検索境界を定めます。レッスンを読む →
CHAPTER / setup
1. 開発環境と実行の基本
Pythonの役割を理解し、実行環境と小さなプロジェクトを整えます。
CHAPTER / language-basics
2. 値・文字列・条件分岐
数値や文字列を扱い、入力条件によって処理を安全に切り替えます。
CHAPTER / collections-and-control
3. 繰り返しとデータのまとまり
測定値や設定をコレクションにまとめ、繰り返し処理と安全な検索を行います。
CHAPTER / functions-and-errors
4. 関数・モジュール・例外
処理を再利用可能な単位に分け、異常の意味を保ったまま呼び出し元へ伝えます。
CHAPTER / files-and-data
5. ファイル・文字コード・ログデータ
パス、CSV、JSON、バイト列を扱い、再解析できる測定記録を作ります。
CHAPTER / software-design
6. 型・クラス・データ処理の設計
状態や記録を整理し、読み手と試験ツールに意図が伝わるコードを作ります。
CHAPTER / hardware-interfaces
7. シリアル通信とハードウェア接続
安全な測定環境を作り、UART、I2C、SPI、GPIOのソフトウェア側の基本を学びます。
CHAPTER / reliable-tools
8. 非同期処理・依存関係・運用
長時間動くツールを管理しやすくし、非同期処理と配布の判断基準を学びます。
一次資料を確認する
構文や標準ライブラリの正確な仕様は公式ドキュメントを参照してください。機器固有の動作は、利用するボード・OS・周辺ICの公式資料が優先です。