Anacondaに頼らない、pipとvenvを用いたPython環境の構築

最近、Pythonに触れることが多くなってきました。
その中で、環境構築についていろいろ学んできました。

Pythonの参考書の多くは”Anacondaで環境構築しましょう”と書いてあります。
しかし、Anacondaはセットアップファイルだけで4GBもあります。
また、自分のシステムに既に入っているPythonとの相互関係も最初の頃はよくわからなくなります。

Anacondaを横においておくと、Pythonには、パッケージマネージャーとして、”pip” というものがあります。
これも若干クセがあるので、いくつかおさえておくべきことがあります。

さらに、Pythonは”venv”というパッケージを使うことで、仮想環境を簡単に構築できます。
このvenvについて把握すると、Anacondaなどのことも理解しやすくなります。

ということで、私なりに理解したことをここでまとめていきたいと思います。
なお、ここではすべてPython3環境を意識していきます。pipはmacOSやUbuntuでは全部Python3になっています。DebianではPython2のようですが、最近、Debianを使っていないのでよくわかりません。(man pip に書いてある情報から記載しただけです)

現時点での私のおすすめは、
「基本、–userをつけてpipでインストール。試験的に試したかったらvenvで仮想環境内で構築」です。

概要は以下になります。

pip

どのpipを使っているかの確認

システムへのインストールと個別ユーザーへのインストール

venv

仮想環境の構築

仮想環境の有効化

仮想環境の無効化

続きを読む

macOSでのSPM12のコンパイル方法

ある方から、Apple M1のmacでSPMを起動しようとするとspm_check_installation(‘basic’)でエラーが出て起動しないという相談を受けました。

コンパイルしたら問題は解決しました。コンパイル方法を共有します。

ただし、その後、SPMのMLでこのディスカッションに乗ってみたところ、コンパイルは不要だよということも教えていただきました。なので、コンパイルに挑戦してみたい人向けと思ってください。(普通は不要です)

続きを読む

格安パルスオキシメーターは使えるのか?

久しぶりに脳画像以外のネタを。

COVID-19が猛威をふるう中、動脈血酸素飽和度 (SpO2) を測定できるパルスオキシメーターの需要が増えています。
万が一自宅療養になる時などにそなえてパルスオキシメーターが家にあるといいなと思いましたが、
一般的に購入できる1万円未満のパルスオキシメーターのレビューを見ると、みなさん、様々なことを書いていて、判断に困るなぁと思いました。

そこで、実際どうなのかと思い、自ら人柱になって、自腹で購入して実験してみました。

続きを読む

CONNチュートリアル (20.b対応): SETUP – Covariates (2nd-level)

前処理のQAで今回準備したサンプルデータでは、Subject 16は解析に不適ということがわかりました。なので、これを省きたいと思いますが、その前に準備している Covariates を登録しておきます。(そうでないと Covariates を入れてある subjects.txt を編集し直さないといけないからです。)

続きを読む

CONNチュートリアル (20.b対応): ワーキングディレクトリの設定

脳画像解析を行う際には、「ワーキングディレクトリ」を意識することがとても大切になります。なぜならば、ワーキングディレクトリの中に画像データが保存されていくからです。CONNも例外ではありません。

そして、忘れられがちですが、Matlabでまずワーキングディレクトリに移動してからCONNやSPMを起動すると、ファイルの選択などが非常に容易になります。

今は、conn_practice.zip を展開してできた conn_practice をワーキングディレクトリとして設定したいと思います。

続きを読む

CONNチュートリアル (20.b対応): 必要なデータ

CONNのために必要なMRIデータ

CONNを使うために必要なデータは、3次元T1強調画像と安静時脳機能画像です。安静時脳機能画像は、4次元画像の方がとりまわしがしやすいです。3次元fMRIデータを4次元fMRIデータに変換する方法は、こちらの記事にまとめましたので、そちらをご参照ください。

続きを読む

3次元fMRI データセットを4次元fMRIデータセットに変換する方法: SPMとFSLの比較

fMRIデータは3次元データで取り扱う場合と4次元データで取り扱う場合があります。

3次元データの場合、たとえば1つのセッションが240ボリュームで構成されているとすると、240のniftiファイルで構成されます。

4次元データの場合、1つのniftiファイルに240ボリュームがすべておさめられています。

個人的には、データ管理という点では、4次元データの方が取り扱いやすいと思っています。

そこで3次元データを4次元データに変換する方法をSPMの場合とFSLの場合でまとめたいと思います。

必要な情報としては、TRです。この情報がないといくつかのソフトはうまく動かなくなります。

続きを読む

Linuxで特定の時間より後に生成されたファイルを列挙する方法

画像解析などをしていると、しばしば、「今の作業で新しくできたファイルは何だろう?」と思うことがあります。

Linuxでは、find コマンドに、-newer というオプションがあります。findのmanページには以下の記載があります。

-newer file
ファイルが file よりも最近に内容を更新されていれば、真を返す。

であるならば、あるファイルを作成して、作業をして、その後に、findをかければ列挙できるはずです。

いろいろ調べた結果、touchコマンドで -t オプションを使うとタイムスタンプを決められるので、それをスクリプトに組み込めるなと思いました。

以下のスクリプトで、新たに生成されたファイルの一覧が generated_from_タイムスタンプ.txt に作成されます。

#!/bin/bash

#generate timestamp
ts=$(date +%Y%m%d%H%M.%S)

#generate a temporary file with current timestamp for find
touch -t $ts /tmp/_timestamp

# BEGIN commands to generate new files
#
# END

# list files which is generated after /tmp/_timestamp
find . -type f -newer /tmp/_timestamp | tee -a generated_from_${ts}.txt