R環境構築
https://hackmd.io/bagaoBc9SGyPaxdJnSI79A?view
Python環境構築
https://hackmd.io/@KashiwaScienceCamp2020Kiryulab/python
スパコン演習
https://hackmd.io/@KashiwaScienceCamp2020Kiryulab/HGC
Pythonというプログラミング言語をインストールします。機械学習などでよく使われている言語です。
今回の実習では、Anacondaというデータサイエンス向けに作られたPythonのプラットフォームを使って実習を行います。Anacondaでは科学技術計算に必要なライブラリなどがまとめられているので、簡単に環境構築を行うことができます。
Anacondaの公式サイトよりPython2.7のWindows版のインストーラをダウンロードし、実行してください。
なお、今回の実習では解析の都合上、Python2を使用しますが、現在は多くのライブラリがPython3でも利用できるようになっています。またPython2は2020年の1月でサポートが終了しているので、自分でPythonを使ってみたい場合はPython3を利用することを強くお勧めします。
また、Python2とPython3の間で互換性は保証されていないので、注意が必要です。
インストールが終わったら、Windowsのメニューより、AnacondaフォルダのAnaconda Powershell Promptを開いてください。
今回必要なパッケージはnumpy, matplotlib, networkxです。Anacondaの場合、これらのパッケージは既に含まれているのですが、networkxのバージョンが解析で使うものより新しくなっています。
今回はcondaで解析用の仮想環境を作ります。
Anaconda Powershell Promptで、
と実行してください。
最初の行を実効すると仮想環境が構築されます。2番目のコマンドでその仮想環境に入っています。3行目で必要なバージョンのnetworkxをここからインストールします。
環境構築が終わったら、conda list networkx
と実行して、networkxのバージョンを確認してください。1.9.1になっているはずです。
公式のチュートリアルが提供されています。今回はその中でもよく使うもののみを説明します。
Anaconda Powershell Promptでpython
と入力してください。Python2.7がインタラクティブモードで立ち上がります。インタラクティブモードでは実行したコードの結果がすぐに表示され、確認することができます。
pythonで出力をするにはprint
を使います
次のコードを試してみてください。
"Hello, python2!"と表示されたと思います。なお、python3の場合は
となります。
pythonでコメントアウトするには#
を使います。自分が書いたコードについてメモを書きたいときなどに使います。
#から始まる行がコメントとして無視されます。行の途中から#を書いた場合は行のそれ以降がコメントとして無視されます。
先ほど出力したときのように、文字列はダブルクオート("
)やシングルクオート('
)で囲んで表す必要があります。Pythonではシングルクオートでもダブルクオートでも同じように使えます。
文字列同士は+
を使って連結できます。下の二つの行は同じ出力をします。
+
,-
,/
,*
を使って計算をします。
%
を使うと、割り算のあまりが計算できます。
**
は累乗を表します。
データに名前をつけて、変数として扱うことができます。
変数として扱えるのは数値だけではなく、様々なものを変数として扱えます。
Pythonではリスト、辞書型、タプル、セットなどのデータ構造が使えます。リスト、辞書について説明します。
リストは複数の値を保持することができるデータ構造です。Pythonのリストは異なる型のデータでも格納することができます。リストは[]
で表現します。
リストの要素へのアクセスは、インデックス(リストの何番目の要素か)を用いて、次のようにして行うことができます。
インデックスは0から始まるので注意してください。
辞書はキー(key)と値(value)の値の集合です。キーを用いて値にアクセスすることができます。重複するキーを保つことはできません。
要素の追加は次のようにして行えます。
操作をまとめて、関数を定義することができます。関数の定義はdef
を用いて次のように行います。
この関数を呼び出してみましょう。
test
と出力されるはずです。
Pythonではインデントが非常に重要です。インデントによってブロックを表します。
インデントはスペースキー4個がPEP8で推奨されています。(https://pep8-ja.readthedocs.io/ja/latest/)
この例では、関数の内部(この例ではprint "test"
)の前にインデントが必要です。
インデントを間違えると全く異なる動作をします。func1
とfunc2
を次のように定義します。
このとき、func1
で出力されるのは1だけです。それに対し、func2
では1と2が出力されます。
インタラクティブモードだとfunc1
のようなインデントをしようとするとエラーが出ますが、ファイルにコードを書き込んでそれを実行する場合だとエラーが出ない場合があるので注意が必要です。
また、関数は引数をとることもできます。複数の引数を持たせることもできます。
if
を用いると操作を分岐させることができます。
else
節内部のコードはそれまでの条件式が全て一致しなかったときに呼び出されます。また、elif
節を使って、さらに細かい分岐を作ることもできます。
for文を使って、繰り返しを行うことができます。
1から10まで出力するコードは次のようになります。
range(10)は0から9までのリストを返すので、i+1として1から10まで出力するようにしています。
numpy, matplotlib, networkxなどは外部ライブラリと呼ばれ、標準ではインポートされません。使用するには個別にインポートする必要があります。
と実行してみましょう
matplotlib
はプロットによく使われているライブラリです。試しに
と実行してみてください。プロットが表示されるはずです。matplotlibには様々な種類のプロットが用意されているので、興味があったら調べてみてください。
長さn(n>=3)のフィボナッチ数列を出力する関数を作ってみてください。
ヒント(必ずしもこのような形で書く必要はありません)
https://github.com/hmatsu1226/SCODE
これのdata1はscRNA-seqのデータから、転写因子100個のみを選択したものです。Pseudotimeの推定手法を考えて、実装してみてください。Monocleというpseudotime推定ソフトウェアによる値がtime_test.txtおよびtime_train.txtに書いてあります。この値と自分で考えた手法の結果を比較してみましょう。
このデータはSCODEという手法の提案論文で使われたもので、手法のバリデーションのためテストデータとトレーニングデータに分けてあります。一つにまとめたものをGitHubにおいておくので、こちらを使っても構いません。
https://github.com/kubotam-m/scicenceCamp2020