コホートシミュレーター
2019/06/04 v1.0
python@3.7.1
ipython@7.2.0
jupyter@1.0.0
pip install numpy
pip install scipy
pip install pandas
pip install stats
pip install matplotlib
pip install seaborn
- import文は、出来る限りas句を利用せず、コンポーネント名を利用し、可読性を上げる。
- Native Pythonでも稼働できるようにし、VSCODEでステップデバッグが可能な状態にする。
- コンスタント定義は、大文字定義とし、先頭部分に一括定義をする。
- ソースから読み取れる場合、冗長なコメントを付与しない。
- 仕様書出力や、コードヒント出力のため、メソッドには標準コメントを付与する。
- メソッド引数には、型アノテーションを付与し、型相違バグをコーディング時に摘出させる。
- コードヒントが出力可能なIDEにてコーディングを行う。
- 演算子の前後およびコンマの後方には、空白を入れ、目視レベルでの問題が発生しないようにする。
- class構造として、データオペレーション関連ロジックを集約させる。
- classとinstanceの設計を事前に検討し、複数のinstance利用を前提に、コードの再利用性を考慮する。
- class.methodの表記にてドキュメント性を向上させる命名を行う。
- UI関連とデータオペレーション関連は、ロジックのポータビリティを考慮し、明確に分離させなければいけない。
- print文は、原則、format編集を利用する。
- 変数名は、一貫性のある命名ルールを利用する。今回は camelCase を利用した。
- 変数名の構成は、一般的に、「動詞」+「名詞」で構成する。
- 単数、複数の区別は、明確に表現する。(例:date, dates や row, rowlist)
- 内部スコープアクセスに閉じたメソッドやプロパティを定義する場合、メソッド名、プロパティ名の先頭に "__"を付与する。
- グローバル変数・関数・クラスは、限りなく少ない構成とすること。
- 変数定義と参照部分に関しては、原則、50行以内の距離で定義することが望ましい。
- 変数汚染(関数汚染も同様)が発生しないよう、変数スコープについては常に考慮し、スコープの局所化を行う。
- 100行を越えたところから、人間系での問題摘出は、急速に鈍くなる。そのため、意味のある一連のコードは、50行以下で意味のある集合になるよう調整することが望ましい。また、IDEの活用による、コードヒントや文法不正チェックが可能な環境下での作業が必須である。
- numpyでの = 演算子でのコピーは、shallow copyであることに注意。第2層以下は、コピー元インスタンスと共用される。全構造コピーを行う必要がある場合、 copy.deepcopy メソッドを利用する。
- 患者集合を表現するクラスとして設計を行った
- 全患者インスタンス、コホート患者インスタンスとして共通利用できるクラスとする。
- プロパティとして、発生率・患者数・観察年数・患者リストを実装する。
- インスタンス作成時に、初期データが構築される。
- 全患者インスタンスでの利用と、コホート患者インスタンスでの利用では、コンストラクト時の第4引数の有無で区別される。
- コンストラクト時に第4引数(initData)が指定されている場合、ファクトリメソッドを利用し、self instanceの患者集合よりランダム抽出された患者集合を作成する。
- ファクトリメソッドは、親 -> 子 -> 孫 という関係で、無限生成を行うことができる。
- 上記の様に、複数のインスタンスが同一のクラスにてそれぞれ独立空間にて同じ振るまいが期待される場合に有効な手法である。
- 状況によっては、継承関係で利用することがふさわしいケースもあり得る。(今回のケースでは存在しなかった)
ーーー 以上 ーーー