Scanpyの真の力を僕達はまだ知らない

これまで、老化細胞データを読み込むために、ScanpyというPythonパッケージを利用していました。read_h5ad関数でH5ADファイルからデータを読み込んだ後は、他のツールを使って主成分分析(PCA)やt-SNE/UMAPを実行しました。

実は、データ読み込みだけでなく、PCAによる次元削減やt-SNE/UMAPでの可視化までをScanpyだけで完結させることができます。それだけでなく、不要なサンプルを削除したり正規化をかけたりする「前処理」もScanpyで行うことができます。


本記事では、読み込んだデータに対して前処理から可視化までをScanpyで実行する方法について紹介します。

続きを読む

主成分分析で次元を落とす

世の中には2種類のデータがあります。Nが大きいデータとpが大きいデータです。

Nはサンプル数、pは特徴量の数を指します。例えばコロナウイルスのデータでは、1つのデータに対して「患者年齢」「患者状態」などの特徴量が10個程度なのに対し、サンプル数は数百、数千と存在するため、Nが大きいデータです。

一方、老化細胞データでは、1つの細胞データに対して数万種類の遺伝子におけるmRNA数が用意されています。そして、実験によっては十分な細胞数を確保できないことがあるため、そのときはサンプル数Nに対して遺伝子数pが多くなり、pが大きいデータとなります。


一般に、pが大きいデータはNが大きいデータに比べて解析が難しい傾向があります。そこで、pを減らすための方法が色々と開発されています。本記事では、特徴量の数pを減らすための「次元削減法」の一つである「主成分分析」について紹介し、実際に使ってみます

続きを読む

Twitter「荒らし」対策の考察

SNSなどのインターネットサービスにおいて、誹謗中傷のような迷惑行為を行うことを「荒らし」といいます。「荒らし」が被害者に与える影響は小さくなく、場合によっては精神を病んでSNSの利用自体を辞めてしまったり、企業の場合は「荒らし」による炎上で活動を停止せざるを得ない状況に陥ったりしているようです。


「荒らし」はSNSが普及する前から存在しており、これまでの経験則から、「荒らし」は無視するのが一番であるといわれています。一部では、「荒らし」を無視しても効果は無いという意見もあります[1]が、一時的にでも「荒らし」から逃避するという意味では、「荒らし」を徹底的に無視するのはそれなりに有効だと思われます


たいていのSNSでは、「荒らし」コメントを排斥するための機能を有しています。その中でも、本記事ではTwitterにおいて「荒らし」を無視するための機能について紹介し、それらの有効性の考察を行います

続きを読む

自宅研究員と英語

自宅研究員とは、自宅で研究活動を趣味として行う者を指します。成果を出すために論文を執筆するなどの工程が不要なので、一般的な研究職とは何かと異なる点があります。

ところで、研究者にとって英語力は必要不可欠だとよく聞きます。私が以前在籍していた研究室でも、進捗報告は日本語禁止でしたし、学会発表でも多くの場合は英語で行われます。

それでは、自宅研究員の場合は、英語力は必要なのでしょうか

本記事では、英語の文章(リーディング/ライティング)と音声(リスニング/スピーキング)に分けて、一般の研究職と自宅研究員の違いについて考察します。


前提


ここでは、私が経験した範囲内で研究者の英語事情を比較します。したがって、人文科学と社会科学の研究者や、企業の研究職は対象外とします


文章力


一般の研究職の場合

有期雇用の場合は、実績として原著論文数が考慮されるので、英語での論文執筆能力は確実に必要となるでしょう。また、論文査読の際に査読者とのメールでのやり取りがあるので、ここでも英語でメールを書く能力が必要となります。


そして、英語を書くには正しい英語の書き方を知る必要があります。そのための一番簡単な方法は、他の論文の英語を真似することです。多くの場合、論文を書く際には書きたいフレーズを既存の英語論文から探して書くことになるはずです。

したがって、必然的に論文を読む能力も必要となります。論文が読めなければ、似ているフレーズを探すのも困難になるからです。


まとめると、研究職を続けるには英語論文を書き続けなければならないので、論文を書く能力と参考論文を読む能力が必要となります


自宅研究員の場合

趣味で研究する分には論文執筆が不要なので、英語記事を書かない場合は英語力は不要です。しかし、当然ながら英語記事を書く場合は必須となります。しかも、論文を書くよりも高難易度である可能性が高いです

というのも、英語圏でのSEOを気にして記事を書く必要があるからです。どのキーワードを選択するかとか、どのように記事を構成するかを研究するのは、日本語でもレベルが高いです。

一方で、英語論文は書き方がある程度決まっており、参考にできる文章もたくさん公開されているので、比較的難易度が低い印象です。


まとめると、英語記事を書く場合は英語力が必ず必要になり、しかも超高難易度になる可能性があります


私の場合

私自身は、特に英語圏向けに記事を書く予定はありません。理由としては、英語ネイティブの人口はそれほど多くなく、英語で記事を書くことにそこまで魅力を感じないからです。

私の想定では、AIの発達により英語以外への翻訳も進歩していくはずなので、ひとまずはアカデミックライティングを意識して日本語の記事を書き溜めておき、いずれは翻訳AIで別言語記事に変換していくことを予定しています。


会話力


一般の研究職

国際学会に参加する場合、英語を聞いたり話したりする能力が必要となります。また、今時は国内学会でも英語で発表することが多くなっているため、学会発表を重視する研究室なら英会話はできた方が良いでしょう

しかし、学会不要論を提唱している層も存在するため、場合によっては学会に参加しなくてもよいかもしれません。


ただし、研究室に外国人スタッフがいる場合は事情が変わります。ほとんどの研究室では定期的に進捗報告や論文紹介などが開催されていますが、参加者に外国人がいると進捗発表が英語になる可能性が急増します

また、海外の研究室と共同研究することもあり得ます。その場合は、英語で会議をすることになります。


このように、研究室に在籍している限りは英語で会話する機会が多くなるため、英会話ができた方が肩身が狭い思いをしなくて済みそうです


自宅研究員の場合

基本的には一般の研究職と同様で、海外の研究員と積極的に関わるなら、英会話能力が必要となります。ただし、自分の行動指針が自分で決められる分、英会話を避けて活動することも可能です

例えば、YouTubeで英語講演を聞く場合は、英語の自動字幕を付けることでリスニング能力が無くてもある程度は英文が分かるようになります。あとは英語を読む能力があれば、講演内容を理解できるでしょう。

自分で講演する場合も、無理に英語で話さなくても、講演自体は日本語で話して、動画に英語字幕を付けるなどの策も取れます。


本職の研究者と違って英語が強制されることは無いため、上記の通り自分の英語力に合わせてどこまで頑張るかを決めることができます


私の場合

私はそもそも声出しするつもりが無いので、英語どころか日本語で会話する機会もこの先ないと思われます。なので、英語の勉強は文章力特化で進めていくことになりそうです。


まとめ


この記事では、英語の必要性について、一般的な研究職と自宅研究員の違いを考察しました。


研究職では英語が必須というのはよく聞きますが、私の経験からしても確かに英語力が問われる機会が多かった印象です。私は英語ができる方ではなかったので、かなり苦労した記憶があります。

一方、自宅研究員では上司に英語を強制されることが無いので、避けようと思えばいくらでも英語から逃げることができます。ただし、日本語圏外の人間には自分の発信が届かないので、英語を使わないと必然的に影響力が小さくなります。


いずれにしても、英語はできるに越した事はないため、既に英語力が高い人はぜひ活用した方が幸せになれるはずです。英語に自信が無い人は、これからのキャリアプランを考慮して、今後英語力を伸ばしていくべきかそれとも得意分野をさらに伸ばしていくのか、取捨選択するのが良いと思います。


以上です。

APIマニュアルからデータ読み込み関数を探す

シングルセルデータをPythonで読み込むにはScanpyが便利です。以前の記事では、Scanpyのread_10x_h5という関数を使ってH5ファイルを読み込みました。

Scanpyの関数でファイルを読み込むと、Anndata型のデータとして変数に格納されます。このデータ型では、シングルセルデータの遺伝子名とサンプル名をデータ行列とともに持つため、以降の解析がやりやすくなります。


ところで、Scanpyはh5ファイルだけではなく、他形式のファイルも読み込むことができます。例えば、Excelで作成したXlsxファイルも読み込むことができます。

本記事では、Excelに保存したデータを読み込みAnndata型データに変換する方法を紹介します。


発端


私が今研究に使っている老化細胞データは、とある論文で使われているものを拝借しています。こちらの論文なのですが、解析のために作成したプログラムが補助資料として公開されています。

そこで、著者たちが作成したプログラムを読んでみたのですが、ここではread_10x_h5関数ではなくread_h5ad関数でデータを読み込んでいることに気がつきました。


詳細は未だ不明ですが、どうやら本解析においてはGEOに登録されたH5ファイルではなく、著者HPに公開されているH5ADファイルのデータが利用されているようです。


そんなこんなで、今ではH5ADの方のデータに乗り換えたわけですが、ここで関数の使い方を調べるためにScanpyの APIマニュアルを調べていたところ、H5以外のファイル形式からでもデータが読み込めそうであることを知りました

どうやらTXTやCSVなど、色々なファイル形式に対応しているようで、中には知らない形式のものも記載されていました。とりあえず、今回はExcelファイルの読み込みに挑戦して一応成功したので、そのやり方を共有します。


f:id:emoriiin979:20201120142946p:plain

f:id:emoriiin979:20201120143004p:plain


ファイルを読み込むための関数


どのファイル形式が読み込めるかは、マニュアルに記載されています。H5ADファイルを読み込むにはread_h5adを使い、Excelファイルを読み込むにはread_excelを使います。


import scanpy as sc

adata = sc.read_excel("filename.xlsx", sheet=0)


引数(括弧の中に入れる値のことです)に何を入力するのかは、関数によって異なります。

例えば、read_h5adでは引数にはファイル名しか入りませんが、read_csvなら引数に区切り文字(delimiter)を指定することができます。これは、CSV(カンマ区切り)ファイルだけでなく、TSV(タブ区切り)ファイルも読み込みたいときに指定します。

何を入力するべきなのかもAPIマニュアルに書かれているので、そちらを参照してください。


まとめ


この記事では、Scanpyのread_excel関数を使うことで、Excelファイルのデータを読み込む方法について紹介しました。


Anndata形式にすると、Scanpyの様々な解析用メソッドが利用可能となります。例えば、不要な遺伝子をフィルタリングするなどの前処理を行ったり、t-SNEなどで可視化を行うなどがメソッド一つで行えるようになるので、覚えておいて損はないかと思います。

Scanpyについては私も勉強中で、未だに思い通りに動かず様々なハプニングに見舞われたりしていますが、また新たな知見が見つかったら今後も紹介していきます。


以上です。

シングルセルデータの可視化

このグラフは何でしょうか?


f:id:emoriiin979:20201111204253p:plain J.C. Kimmel et al., 2019


このようなグラフは、シングルセル解析の論文でよく出てきます。シングルセル解析というのは、臓器や組織から採取された大量の細胞データを解析することをいいます。

このグラフの各プロットは細胞を表し、距離が近いほどデータの類似度が高いことを示します。


本記事では、このグラフの作成に挑戦します。

続きを読む

老化細胞データの読みかた

前回、GEOというデータベースから老化細胞データを入手しました。このデータを使って、今後はデータ分析を行っていきます。

しかし、データの中身がどうなっているのかはまだ説明していませんでした。そこで、今回の記事では行名・列名やデータそのものの読み方について説明します。

続きを読む