いろいろな条件で遺伝子発現パターンを調べ、各条件に共通した因子を探るときなど、よくベン図を使う。2条件、3条件などのかんたんなものから、単純な円で表現できなくなる4条件以上など。
これを今まで、excelで並べて処理していたんだけど、超面倒くさい。excelでは図も描いてくれないしね。ということで面倒くさいことはpythonにやらせるに限るね。
条件A: 2, 4, 6, 8, 10, 12
条件B: 3, 6, 9, 12
こういう単純なものだと
Aのみ: 2, 4, 8, 10の4個
Bのみ: 3, 9の2個
AとBの重なり: 6, 12の2個
というかんじに簡単に整理できるのだが、これを勝手にやってもらいたい。
まあPythonで作図なのでmatplotlibかいな、と思って探してみたところmatplotlib-vennというライブラリがつかえるっぽい。
$ python3 -m pip install matplotlib-venn
と。
$ python3 Python 3.9.13 (main, May 24 2022, 21:28:12) [Clang 12.0.0 (clang-1200.0.32.29)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from matplotlib_venn import venn2 >>> import matplotlib.pyplot as plt >>> venn2([set([2, 4, 6, 8, 10, 12]), set([3, 6, 9, 12])], set_labels=('A', 'B')) >>> plt.title("TEST2") >>> plt.savefig("test2.png")
これで
こんな感じに描ける。
次に3条件
条件A: 2, 4, 6, 8, 10, 12
条件B: 3, 6, 9, 12
条件C: 6, 13, 14
ではどうなる?
3条件のときはvenn2ではなくてvenn3というのを使うらしい。
>>> plt.close('all') >>> from matplotlib_venn import venn3 >>> venn3([set([2, 4, 6, 8, 10, 12]), set([3, 6, 9, 12]), set([6, 13, 14])], set_labels=('A', 'B', 'C')) >>> plt.title("TEST3") >>> plt.savefig("test3.png")
さて、4条件以上はどうするんだろうか。
あと、それぞれの枠に収まる奴らをリスト化したいんだが、それもどうするのか。
それぞれの要素を書き出すには
>>>A_B_C = set([2, 4, 6, 8, 10, 12]) & set([3, 6, 9, 12]) & set([6, 13, 14]) >>>print(A_B_C) {12}
でいいわけだな。
pandasと合わせてちょいとアプリ化してみるか。