KNIME・EXCEL倉庫

KNIMEやEXCELマクロの備忘録です。

【KNIME】ファイル名を変更したい。

・ファイル名を変更したくなったのでやり方を調べてみた。

・参考にしたのは、KNIME Hubの以下の記事。

hub.knime.com

・私が作成したのは、以下のワークフロー。

f:id:choron81:20220119224308p:plain

・流れは以下の通り。

①String Inputで変更後のファイル名を入力(変数名はNewnameとした)。

②List Files/Foldersノードで名前を変更したいファイルの情報(Path)を取得。

③Pathからファイル名を抽出したいが、Path型のままだと加工できなかったので、Stringに変換(デフォルトでLocationという列名になった)。

④String化したPath(Location)からファイル情報を取得。

⑤String Manipulationのreplace関数でString化したPath(Location)に含まれる旧ファイル名(File name)を新ファイル名(Newname)に置換(下図、新しいPathをNewPathと命名

f:id:choron81:20220119224849p:plain

⑥旧Path(Location)と新Path(NewPath)をそれぞれURI化。

⑦Copy/Move Filesノードで、旧Path(Location)から新Path(NewPath)にファイルをMoveすると、結果的にファイルの名前だけ変わる(下図)。

f:id:choron81:20220119225449p:plain

・Before

f:id:choron81:20220119224400p:plain

・After

f:id:choron81:20220119225544p:plain

・ループとかと組み合わせるといろいろと使えそう。

 

終わり。

 

【KNIME】プレートリーダーのデータを解析したい(Rの利用)。

・先日の続きで、プレートリーダーのデータを解析して、IC50(50%反応阻害濃度)などを求めてみたい。

・デフォルトのKNIMEの機能では目的の解析が難しいので、ExtensionのHTS Toolsをインストールする。Extensionは下図のFile⇒install KNIME Extensions...から検索すると辿り着く。

f:id:choron81:20220109221852p:plain

・このExtensionには、Dose Response(R)というノードが存在するのだが、このノードは単独で使えない。まず、Rという統計解析ソフトをインストールする必要がある。

・Rは、以下からダウンロードできる。Rの日本語の説明は、統計局のHPが分かりやすい。

cran.r-project.org

・更に、Rに解析パッケージをインストールする必要がある。

・まず、Rを起動し、CRANミラーサイトを設定する(下図)。

f:id:choron81:20220109222441p:plain

・次に、以下のコマンドで、drcパッケージとRserveパッケージをインストールする。

install.packages("drc") 

install.packages("Rserve") 

・更に、Rを起動した状態で、Rで以下のコマンドを実行する。

library(Rserve); Rserve(args = "--vanilla")

・これでようやくDose Response(R)ノードを使用できるようになる。

・以前整理した表をそのまま使って、以下のように解析した。

f:id:choron81:20220109222950p:plain

・Dose Response(R)ノードの設定は以下の通り。

f:id:choron81:20220109223029p:plain

・出力の上のポートからは、数値の基本情報、真ん中のポートからはグラフ、下のポートからはモデル情報が出力される(下図)。

f:id:choron81:20220109223148p:plain

f:id:choron81:20220109223209p:plain

f:id:choron81:20220109223541p:plain

・それっぽく濃度反応性を評価することができたように思う。

・今回はお試し版として、簡易的な実験を設定してみた。細胞の反応を阻害することを想定した実験であれば、100%阻害(細胞なしや刺激誘導なし。今回は設定していない)と0%阻害(試験物質の媒体対照など。今回でいう濃度ゼロ)に相当する条件を設定し、可能であればn=3以上にすることが望ましいと思う。今回は各試験物質に対して0%阻害を設定する設計にしたが、普通ここまでクドく置く必要はないと思う。また、今回は細胞の反応に対する阻害を評価したいので、先に算出した100%阻害と0%阻害のデータから、いったん阻害率を算出してから50%阻害濃度を算出することが望ましいと思う(今回の縦軸は%ではなく、直接的な観測値。今回のシグモイドカーブのトップが60弱なので、30弱になる濃度が50%阻害濃度=IC50に相当する)。更に、0%から100%までの反応が想定できるのならば、今回設定した4パラメーターロジスティック回帰ではなく、2パラメーターロジスティック回帰などの方がそれらしい結果が出るかもしれない。設定方法を調べる必要はあるが。。

・必要に応じて、反応率または阻害率を算出するワークフローと組み合わせて使うと有用と感じた。

 

終わり。

【KNIME】プレートリーダーのデータを整理したい。

・生物系の実験で、プレートリーダーで得られたデータを解析することで、試験物質のin vitro活性を評価することがしばしばある。

・KNIMEでこの解析が自動化できないか調べてみたところ、ExtensionのCommunityノードで、HCS Toolというものがあった。これを利用することで、先日の解析ができそうだった。

・KNIMEでデータを解析する前準備として、プレートリーダーのデータを整理する方法を考えてみた。

・例えば、96穴プレートの外周に乾燥防止用の滅菌水を分注し、内側60穴に細胞を播種し、データを得た場合を考える。試験物質の濃度依存性を評価するために、100, 25, 6.3, 1.6, 0μMの最終濃度で試験物質を添加し、duplicateでアッセイを実施したとする。

・データを以下のようにまとめた状態から、KNIMEで解析しやすい形にデータを整える。

f:id:choron81:20220109220547p:plain

・ワークフローを以下のように組んでみた。

f:id:choron81:20220109220703p:plain

・工程は以下の通り。

①データを読み込む。

・例えば、測定データを読み込むEXCEL Readerノードの設定は、以下の通り。Excel Readerノードでは、どのファイルのどのシートのどの列・行の範囲からデータを読み込むのかを指定できる。

f:id:choron81:20220109220919p:plain

②Matrix状態だと統合しづらいので、List形式にUnpivottした(設定は下図)。

f:id:choron81:20220109221110p:plain

③あとは列名を変更し、いらない列を削除し、くっつけた(下図)。

f:id:choron81:20220109221237p:plain

・あとはこの表をHCS ToolsのDose Response(R)ノードに読み込ませて、適当に設定すれば解析してくれる。今回はいい加減な実験だが、とりあえずKNIMEで処理を回してみたいので、これでやってみる。

 

いったん終わり。

【KNIME】データをピックアップしたい。

・KNIMEでデータからモデルを作成する際に、データ全体ではなく、その一部からピックアップして使いたくなることがある。

・例えば、「100行ある表から、30行だけピックアップして何らかの解析に使いたい」、「被りありで50行ピックアップしたい」、「分類問題でデータ数に偏りがあるので、多い方のラベルデータを、少ない方のラベルデータの数に合わせてピックアップしたい(不均衡データをアンダーサンプリングしたい)」など。

・KNIMEには、それらのピックアップを実行するノードが搭載されている(下図)。

f:id:choron81:20220108221554p:plain

・Row Samplingノードは、ピックアップするデータのサイズやピックアップの仕方を指定することができる(下図)。

f:id:choron81:20220108221704p:plain

・Bootstrap Samplingノードは、被りあり(同じ行がサンプリングされる可能性がある)でピックアップする(下図)。ピックアップされなかった行は下の出力ポートに出てくる。

f:id:choron81:20220108221834p:plain

・Equal Size Samplingノードは、指定した列にグループ情報があると判別し、そのグループ内のデータサイズが最も少ないものに合わせて他のグループからデータをサンプリングする。「だいたいでサンプリングする」こともできる(下図)。

f:id:choron81:20220108222001p:plain

・私の場合は、不均衡データをアンダーサンプリングしたかったので、Equal Size Samplingノードが便利だった。

・ちなみに、データをピックアップするのではなく、2つの表に分けたいのであれば、Partitioningノードが便利(下図)。このノードは、機械学習のワークフローを構築する際に、データを学習データとテストデータに分割する際に用いられることが多い。

f:id:choron81:20220108222749p:plain

 

終わり。

 

【KNIME】周期性を見てみたい。

・時系列データの解析手法として、トレンド解析及びトレンド除去後の周期性の解析というのが一般的に用いられるらしい。

・時系列データの解析を実施してみたいと思って最初に思いついたのが、気温のデータだった。気温のデータは、気象庁のHPからcsvでダウンロードできる(以下)。

www.data.jma.go.j

・解析する際に気づいたのだけれど、手軽にハンドリングできるデータサイズだとトレンドが緩やか過ぎて、あまり参考にならなかった。ということで、今回は周期性の解析のみ実施してみた(下図)。

f:id:choron81:20220108231717p:plain

・処理の流れは以下の通り。

気象庁HPから落とした10年分の東京の気温データを読み込む。

②RowIDを7で割った整数部分の列を作成。

③②で作成した列でグループをまとめ、算術平均を算出。←各日では重すぎたので、週ごとの平均にした。

④③のデータを図示し、継続的な上昇・下降傾向がないことを確認(下図)。

f:id:choron81:20220108232239p:plain

⑤③のデータを1週ずつずらした表を作成。

⑥ちょっと重かったので行を減らした。

⑦線形相関係数を算出(下図)。

f:id:choron81:20220108232344p:plain

・この時点で52週周期であることが推察された。

⑧図示するにはまだ重すぎたので、行を減らした。

相関係数を図示(下図)。

f:id:choron81:20220108232435p:plain

・綺麗なsinカーブになるものだなぁと感心した。

・今度やるときは、適当な関数から疑似データを作成してトレンドも加味した解析をやる必要があると感じた今日この頃。

 

終わり。

 

 

 

 

【KNIME】外れ値も加味したクラスタリングをしてみたい(DBSCAN)

クラスタリングの手法として、密度を基準に、ぎゅっと集まっているところを一つのクラスタ、疎なところを外れ値として解釈するDBSCANという手法がある。

・ざっくりと組んでみた(下図)。これもデータ間の距離を算出してやる必要があるので、Numeric Distancesノードを噛ませた。

f:id:choron81:20211117231507p:plain

・DBSCANノードの設定では、EpsilonとMinimum pointsを設定する必要がある(下図)。

f:id:choron81:20211117231630p:plain

・前者はどれだけ他のデータから離れるとボッチ(外れ値、noise)認定するか、後者はどれだけ集まってもボッチ認定するか、というイメージ。

・前者が大きすぎると人類皆兄弟と言わんばかりにすべてのデータを1つのクラスタにまとめてしまうし、小さすぎるとどうせ皆孤独なんだといわんばかりにバラバラにクラスタ分けされる。後者が大きすぎるとクラスの最大派閥以外はボッチと言われ、小さすぎるとソロプレイヤーばかりでボッチなんていません、という具合になるらしい。

・この条件でクラスタリングを実施すると4つのクラスタとそれらに属さない外れ値に分類された(下図)。

f:id:choron81:20211117232303p:plain

・この手法の特長は、非階層型クラスタリングクラスタ数を指定する必要がないこと、外れ値を勝手に提案してくれるところか。短所は、先の2つのハイパーパラメータで結果が非常に大きく変わることだろうか(ハイパーパラメータならなんだってそうだろうが)。

 

終わり。

【KNIME】KNIMEの使い道

・私の思うKNIMEの長所は、処理の状況をステップごとに視覚的に追えること、習得コストが低い割にいろいろ出来ること(コストパフォーマンスが良い)、世界的に見ればコミュニティが活発であること、desktop版は無料で利用できること、あたりだと思う。
・そこで、私が何にKNIMEを使いたいのか、何にKNIMEを使えるか、少し纏めてみた。

①処理の半自動化
・現在、個別にちまちま対応している処理を、クリック一つで実施できるようにする。
・例えば、様々な人からフォルダに提出されたデータファイルを一回のクリックで一つのファイルに纏める。一つのファイルに纏めることで、BIツールなどで処理しやすくなる。
・例えば、APIを利用してデータを取得する際に、取得項目をリスト化して一気に取得する。
・例えば、条件を指定して、メールを配信する。条件をリスト化することで、何度もメールを作成する必要がなくなる。

ノンコーディングツールとしての利用
・通常、pythonなどでコーディングしなければできないような処理を、ノンコーディングで実施する。習得コストが低い割に色々できることはKNIMEのメリットだと思う。
・例えば、EXCELで扱うには重すぎるデータファイルを処理する。
・例えば、データベースのクエリ処理など、通常コーディングが必要なことを直感的に実施する。
・例えば、簡易的な機械学習モデルを構築したり、機械学習の勉強に利用する。
・例えば、extensionで機能を追加し、化合物の特性解析、バイオインフォ的な処理を実行する。

・更に、①と②を組み合わせ、通常コーディングツールでやるようなことを半自動化することもできる。

などを思いついた。

・もちろん、バリバリにコーディング出来る人でコーディングしたいならそうすれば良いが、私はインフォ系の人間ではく、コーディングが苦手で、出来る限りやりたくない。また、日常的に検索やデータ統合の処理をちまちま実施しているため、業務の省力化もしたい。更にこれらを合わせて、ノンコーディングツール処理を半自動化出来れば満足度は高い。ついでに、(会社のPCではなく)自分の家のPCに入れて好きに遊べるところも素人としては大変助かる。
・以上から、KNIMEは私の目的に叶うツールであると思う。

・欠点は、プログラミングに比べて処理がもっさりしていること、プログラミング程コアな処理が出来ないこと、謎のエラーがたまに出ること(ソフトのバグ?)、日本語の情報が少ないこと、あたりだろうか。


終わり。