東大 生物情報学科、学部生の備忘録

東京大学の学生です。日々の気づき、学び、つまづいたことをメモにします。

MENU

研究を始めるまで pythonに頼りすぎていた

はじめに

研究が始まって半年くらい経った。 そんな中で自分なりの開発中のベストプラクティスができてきたので、まとめてみる

研究始める前〜始めて数ヶ月の期間

この期間、python を使いすぎていた。

例えば、

  • 簡単なファイル操作
    • csv のheader を変えるとか、各列の和を計算するとか
    • csv の 結合
  • 簡単なグラフ作成
  • 簡単な統計値の計算
    • 平均値を求める
  • (バイオインフォなので)アラインメント計算
  • クラスタリング
  • numpy などで高速計算

などが挙げられる。 python に関しては相当使えるので、これらの操作はどれも python で完結するのは確かなのだが、簡単な統計値を求めるためだけにわざわざ .py ファイルを作ってコードを書くのが面倒だし、python 環境に依存するのが不快になってきた。例えば、グラフ作成だって matplotlib を使うので conda activate mypjt として仮想環境を呼び出す必要がある。

なぜわざわざ conda で仮想環境を作っているかというと、 ラボのサーバに入っている python のバージョンはデフォルトが 2.7.0 であり、python3 に慣れた自分からするとちょこちょこエラーが出るのもだるいし、対応していないパッケージもあるので面倒だからだ。 もう一つの理由は、大量の python パッケージを使うので、 confliction が大発生することもある。

結局のところ * conda activate mypjt * conda deactivate が面倒なので、shell script だけで完結させたいという気持ちが強くなっていった

研究を始めて数ヶ月以上〜最近

shell script を書きまくるようになった。

それに従って、当然だが、python の役割はかなり減った。 具体的には先ほど具体例として述べたものはほとんど bashstand alone software の役割になった。

  • 簡単なファイル操作
    • csv のheader を変えるとか、各列の和を計算するとか
      • --> datamash とか tail -n +2 とか。
    • csv の結合
      • --> sort してから join
  • 簡単なグラフ作成
  • 簡単な統計値の計算
    • 平均値を求めるとか
    • --> datamash
  • (バイオインフォなので)アラインメント計算
    • --> mafft などのアラインメントソフトウェアの導入
      • わざわざ Biopython の alignment を使うことすら無くなった
  • クラスタリング
    • clustalo 等のソフトウェア
  • numpy などで高速計算
    • SGE でアレイジョブを投げるとか、software のスレッド数オプションを使ってさっさと済ます

逆に python に残された役割は

  1. 複雑な DataFrame の計算やグラフ作成
  2. adhoc なアルゴリズムの実装

くらいになった。 2.の adhoc なアルゴリズムの実装については、なるべくこれも bash で済ましたいと思っているが、それは難しいので、C で書いてもいいかなぁとも思う。

けど、サーバで module load gcc とするとなぜか awk がバグるのでだるい。。 また、C はコンパイルが面倒だし、少しお手軽さがない。だからやっぱり、adhoc な coding はpython に頼り続けるという形で落ち着くのかなぁ。