pythonでFACS解析のデータ(FCSファイル)を操作する方法を記しています。
本記事はコンペンセーションの適用方法です。
公式ドキュメント
https://flowkit.readthedocs.io/en/latest/
https://pypi.org/project/FlowKit/
おさらい
import flowkit as fk
import bokeh
from bokeh.plotting import show
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
bokeh.io.output_notebook()
fcs_path = './[ファイル名].fcs'
sample = fk.Sample(fcs_path)
#sampleメタデータの出力(辞書型)
print(sample.get_metadata())
#コンペンセーションの値の出力
print(sample.get_metadata()['spillover'])
コンペンセーションの値の加工
コンペンセーションを適用する際には、適切な形のndarrayしか受け付けない。したがって、sample.get_metadata()['spillover']
によって出力されたコンペンセーション値を加工するひつようがある。
まずは出力例。緑色の網掛け部分がコンペンセーション値の本体である。
これを以下のような配列に加工する必要がある。
配列の形状は チャンネル数
×チャンネル数
にする。
加工方法は以下に2パターン記す。
テキストエディタ等で手作業で加工する
テキストエディタ等にコピペした後に、手作業で改行
[
]
,
を加える方法。
一番簡単でなんだかんだエラーが少なそう。
コードで加工する
詳細は割愛するが、sample.get_metadata()['spillover']
の出力値を指定した文字列で分割した後に、ndarrayに変換している。
上手くいかなかったら修正が必要になるので、その場合手作業の方が短時間で済むかも。
#コンペンセーションの値を抽出してndarrayに変換
channels = len(sample.channels)-7
compe = sample.get_metadata()['spillover'].split(str(channels)+',')[1].split('-W,')[int(channels/3)].split(',')
comp_array = np.array(compe, dtype=float)
comp_array = np.reshape(comp_array, [int(channels), int(channels)])
#ndarrayが正しく生成されていることを確認
print(comp_array)
print(comp_array.shape)
コンペンセーション値の適用
以下のコードを実行する。実行時の出力は特にない。
sample.apply_compensation(comp_array)
これ以後、パラメーターsource='comp'
でコンペ済みのeventを呼び出せる。
##実行例
#eventを取り出してDataFrameに
df_events = sample.as_dataframe(source='comp')
#eventを取り出してndarrayに
array_events = sample.get_events(source='comp')