見出し画像

データサイエンティストが採用すべきソフトウェアエンジニアの5つのベストプラクティス

データサイエンティストとしてコードを書く際、コードの保守性や効率性をあまり考慮せずに実装してしまうことがあります。コードを他人と共有したりする以上、堅牢なコーディングを心がけるべきです。
この記事ではデータサイエンティストがより優れたコーディングをするために採用できる、ソフトウェアエンジニアのベストプラクティスを紹介します。

クリーンなコードを書く
クリーンなコードを書くとは、読みやすく、シンプルで、簡潔なコードを書くことです。クリーンなコードは、メンテナンスが容易なスクリプトの基礎となるものです。
複雑なコードよりもシンプルなコードの方が良いので、自分でも理解するのに苦労するような複雑なコードは書かないようにしましょう。以下は具体例です。
- 意味のある変数名を使う。変数名は説明的でわかりやすいものにしましょう。誰も理解できないような略語を変数名に使わないこと(例えば、tやc)。
- 誰も覚えられないような長すぎる変数名は書かない。
- インデントと空白を正しく使う。インデントには4つのスペースを使うとか、セクションを空白行で区切るとか、いろいろな決まりごとがあります。
- オブジェクトに名前を付けるときは、できるだけPEP8の規約に従う(例:大文字小文字の使い分け、アンダースコアの使用タイミングなど)。

コードの最適化
動作するコードを書くことは良いことですが、より良いことは何かご存知ですか?
高速に動作し、メモリやストレージの消費量が少ない効率的なコードを書くことです。このため、コードを最適化する必要があります。
効率的なコードを書くのは簡単ではありませんが、とはいえ、より効率的なコードを書くために、今日から役立つアドバイスをいくつか紹介しましょう。
- 演算をベクトル化する。可能な限りループではなくベクトル演算(Numpy)を使用する。
- すべての演算の実行時間を調べる。これにより、スクリプトのボトルネックを見つけることができます。
- データ構造を把握し、どのメソッドが速いかを知る

モジュール化されたコードを書く
モジュラーコードとは、関数やモジュールに分離できるコードを書くことです。
モジュールに分割できるプログラムは、デバッグの際に役立ちます。プログラムが大きくなったら、コードをモジュールに分割するのは良い習慣です。そうすることで、エラーの原因を簡単に特定することができます。
また、モジュール化されたコードは、繰り返しを避け、効率的で再利用可能なコードを書くのに役立ちます。
ここでは、モジュール化されたコードを書くためのアドバイスを紹介します。
- 繰り返しをしない 同じ関数やメソッドを使用して1つのタスクを達成している場合、代わりに関数やforループを作成することを検討してください。
- 関数、クラス、モジュールの数を最小限にする
- 単一責任の原則。クラス/関数の責任は1つだけであるべきです。もし、複数のことを行うのであれば、2つ以上のクラスや関数にリファクタリングすることを検討してください。
- モジュールの使用

ログを正しく使う
Pythonには組み込みのloggingモジュールがあり、私たちのアプリケーションに使用することができます。
ログを使えば、コンピュータの前にいないときでも、アプリケーションが通過している流れを常に見ることができます。これは、プログラムの実行中に発生したイベントを記録するのに役立ち、動作やエラーを時系列で見ることができ、作っているアプリケーションの全体像を把握することができるのです。ログメッセージを書くときに従うべき良い習慣をいくつか紹介します。
- 簡潔で、通常の大文字を使用する
- 有益な情報を提供する
- ログの記録には適切なレベルを選択する。ログのレベルを設定することで、何を記録するか指定できます。標準的なロギングレベルは5つ。デフォルトのロギングレベルはWARNINGで、デフォルトではWARNINGレベル以上(WARNING、ERROR、CRITICAL)のものは、それ以下のレベル(DEBUG、INFO)を無視して捕捉されます。
とはいえ、デフォルトの設定を編集することで、ロギングレベルを変更することができます。

コードをテストする
データサイエンスのプロセスでは、プログラムをクラッシュさせるエラーのように簡単に検出できない問題がたくさん発生する可能性があります。コードが正常に動作していても、一部の値が間違ってエンコードされていることに気づかないことがあります。予期せぬ結果を避け、最終的な出力に自信を持つために、コードをテストするのは良い習慣です。
Pythonで素早くテストを始めるには、Pytestを使うことができます。これは、シンプルでスケーラブルなテストを簡単に構築することができるテストフレームワークです。Pytestを使うと、単純なユニットテストから複雑な機能テストまで書くことができます。また、すべてのユニットテストを実行し、どのテストが失敗し、どれが成功したかを見ることができます。

いいなと思ったら応援しよう!