DeepChem によるケモインフォマティクス、チュートリアル 2

Pythonでインフォマティクス

このカテゴリーの記事では、「Pythonを使った機械学習やケモ・バイオインフォマティクスの実装や論文」を紹介していきたいと考えています。Python は3系(3.7)、anacondaを中心にして環境構築していきます。以下のようなハード・ソフト環境(CentOS Linux)を用いますが、Python(anaconda)が利用できれば、異なる環境下でも類似の実装が可能かと思います。

● CPU Intel® Core™ i7-6700K CPU @ 4.00GHz × 8
● メモリ  64GB
● GPU GeForce GTX 1080/PCIe/SSE2
● OS  CentOS Linux 8
● Python 3.7


はじめに

前回、ケモインフォマティクス、特にグラフ畳み込みネットワーク(GCN; Graph Convolutional Network)による深層学習が実行可能な、DeepChem をインストールし、チュートリアル1を実行してみました。以下を参考にしてください。


DeepChemのチュートリアル2

今回もJupyter notebookを起動し、notebook上で実行していきます。

$ jupyter notebook

まずはセルに以下を入力し、Run して下さい。

In [1]:
import deepchem as dc
dc.__version__
Out[1]:
'2.6.0.dev'

1行目でDeepChem をインポートし、dc…の形で使えるようにしています。2行目はDeepChemのバージョンを表示する指示で、2.6.0.dev とバージョンが表示されました。

次の入力から実際のチュートリアルの内容に入っていきます。

2 Working With Datasetsチュートリアルは、その名の通り、DeepChemのデータセットの形式・構造について学ぶ内容になっています。前回と同様、以下を実行することで、Delaney 溶解度データを使用します。

In [2]:
tasks, datasets, transformers = dc.molnet.load_delaney(featurizer='GraphConv')
train_dataset, valid_dataset, test_dataset = datasets

1行目の指示で、Delaney 溶解度データ を読み出しています。化学構造を機械学習で扱える形にしなればなりません。ここでは、featurizer=’GraphConv’と指定することで、GraphConvModel として読み出されています。

2行目の指示では、読み込んだデータセットを、トレーニング(train_dataset) 、バリデーション(valid_dataset)、テスト(test_dataset)の3つの異なるデータセットに分けています。これらデータセットの内容は、print を実行して表示することができます。test_dataset についてみてみましょう。

In [3]:
print(test_dataset)
<DiskDataset X.shape: (113,), y.shape: (113, 1), w.shape: (113, 1), ids: ['c1cc2ccc3cccc4ccc(c1)c2c34' 'Cc1cc(=O)[nH]c(=S)[nH]1'
 'Oc1ccc(cc1)C2(OC(=O)c3ccccc23)c4ccc(O)cc4 ' ...
 'c1ccc2c(c1)ccc3c2ccc4c5ccccc5ccc43' 'Cc1occc1C(=O)Nc2ccccc2'
 'OCC3OC(OCC2OC(OC(C#N)c1ccccc1)C(O)C(O)C2O)C(O)C(O)C3O '], task_names: ['measured log solubility in mols per litre']>

これらデータセットは、”DiskDataset “というラベルで始まっています。”DiskDataset “はデータをDeepChemにおいてデータを格納する形式の一つで、大きなデータを扱うときに使用されます(他の形式として、”NumpyDataset”、”ImageDataset”があります。)。

データセットの中身ですが、まずは、サンプルのリストが格納されています。各サンプルが、1つのデータ点です。Delaney 溶解度データの場合、サンプルは分子であり、ある分子がある1つのデータ点として扱われます。他のデータセットでは、サンプルは、測定値、細胞株、画像等に対応し、それらあるサンプルがある1つのデータ点となります。これらデータセットに、以下の情報が格納されています。

まずは、特徴量 です。これは、機械学習モデルに対する入力値で、X(X1, X2, X3, … Xn)で表されることが普通です。
次に表示されているのが、y と表される ラベルデータです。これは機械学習モデルの予測対象となる値です。つまり、今回のチュートリアルにおいては、溶解度の値ということになります。
w は、重みの値です。これは、どのデータが重要であることを示すために使用されます。
ids は、サンプルを識別するためのIDです。単なる番号の場合もありますが、このデータセットでは、ID は 各分子の SMILES になっています。

X、y、wの1次元目のサイズは、113となっています。つまり,このデータセット、test_dataset には113個のサンプル、データ点が含まれているということがわかります。

最後に、task_names: [‘measured log solubility in mols per litre’] と表示されています。これは、このデータセットには単一のタスク、即ち、溶解度の値が格納されていることを示しています。


データへのアクセス

それでは、データセットに含まれる、あるデータ(ある1つのサンプル、ある1つのデータ点)を表示してみましょう。

一番簡単なのは、X、y、w、idsの各プロパティに直接アクセスすることです。それぞれのプロパティは、対応する情報をNumPy 配列として返します。

In [4]:
test_dataset.y
Out[4]:
array([[-1.60114461],
       [ 0.20848251],
       [-0.01602738],
       [-2.82191713],
       [-0.52891635],
       [ 1.10168349],
       [-0.88987406],
       [-0.52649706],
       [-0.76358725],
       [-0.64020358],
       [-0.38569452],
       [-0.62568785],
       [-0.39585553],
       [-2.05306753],
       [-0.29666474],
       [-0.73213651],
       [-1.27744393],
       [ 0.0081655 ],
       [ 0.97588054],
       [-0.10796031],
       [ 0.59847167],
       [-0.60149498],
       [-0.34988907],
       [ 0.34686576],
       [ 0.62750312],
       [ 0.14848418],
       [ 0.02268122],
       [-0.85310089],
       [-2.72079091],
       [ 0.42476682],
       [ 0.01300407],
       [-2.4851523 ],
       [-2.15516147],
       [ 1.00975056],
       [ 0.82588471],
       [-0.90390593],
       [-0.91067993],
       [-0.82455329],
       [ 1.26909819],
       [-1.14825397],
       [-2.1343556 ],
       [-1.15744727],
       [-0.1045733 ],
       [ 0.53073162],
       [-1.22567118],
       [-1.66452995],
       [ 0.24525568],
       [-0.13215318],
       [-0.97067826],
       [-0.23376326],
       [ 1.21297072],
       [-1.2595412 ],
       [ 0.49686159],
       [ 0.22396595],
       [-0.44182199],
       [ 0.47895886],
       [ 0.08267956],
       [-1.51840498],
       [-0.34795364],
       [-0.83858516],
       [-0.13699176],
       [-2.59498796],
       [ 0.13106531],
       [ 0.09042128],
       [ 1.18877785],
       [-0.82697258],
       [-1.16857599],
       [ 0.37589721],
       [-0.24344041],
       [-2.00952036],
       [-0.59181783],
       [-0.15634606],
       [-2.87272217],
       [-0.34069577],
       [ 0.27622256],
       [-2.15467761],
       [-0.02812382],
       [-2.77401524],
       [ 0.25638441],
       [ 0.84040043],
       [-0.86277804],
       [-1.52082426],
       [ 0.29702844],
       [ 0.44363727],
       [ 0.47460415],
       [-0.08376743],
       [ 0.68556602],
       [ 0.79201468],
       [-1.2401869 ],
       [ 0.6129874 ],
       [-0.58214068],
       [-1.51598569],
       [-1.93984487],
       [-0.30295489],
       [-0.24827899],
       [ 1.06442646],
       [-1.48259952],
       [ 0.0275198 ],
       [ 0.33718861],
       [-0.91600236],
       [ 0.58637523],
       [-0.62084928],
       [-0.30827732],
       [-1.95145746],
       [-0.83568202],
       [ 0.10977558],
       [ 1.90488697],
       [-0.75149081],
       [-1.65630437],
       [ 0.74362893],
       [-2.42079925],
       [-0.20957039],
       [ 1.01458914]])

.y とすることで、test_dataset の y 値にアクセスすることができました。113個の y 値(溶解度データ)が表示されているはずです。しかし、この方法では、すべてのサンプルのデータを一度にメモリに読み込むことになりますので、注意が必要です。今回のような小さなデータセットであれば問題ありませんが、大規模なデータセットであれば、メモリの上限を越えてしまいます。

より良い方法は、以下のような for 文を用いて、繰り返し処理することです。これにより、一度に全てのデータを読み込むことなく、大きなデータセットでも表示することができます。itersamples()メソッドを使えば、サンプルを1つずつ繰り返し処理することができます。

In [5]:
for X, y, w, id in test_dataset.itersamples():
    print(y, id)
[-1.60114461] c1cc2ccc3cccc4ccc(c1)c2c34
[0.20848251] Cc1cc(=O)[nH]c(=S)[nH]1
[-0.01602738] Oc1ccc(cc1)C2(OC(=O)c3ccccc23)c4ccc(O)cc4 
[-2.82191713] c1ccc2c(c1)cc3ccc4cccc5ccc2c3c45
[-0.52891635] C1=Cc2cccc3cccc1c23
[1.10168349] CC1CO1
[-0.88987406] CCN2c1ccccc1N(C)C(=S)c3cccnc23 
[-0.52649706] CC12CCC3C(CCc4cc(O)ccc34)C2CCC1=O
[-0.76358725] Cn2cc(c1ccccc1)c(=O)c(c2)c3cccc(c3)C(F)(F)F
[-0.64020358] ClC(Cl)(Cl)C(NC=O)N1C=CN(C=C1)C(NC=O)C(Cl)(Cl)Cl 
[-0.38569452] COc2c1occc1cc3ccc(=O)oc23 
[-0.62568785] CN2C(=C(O)c1ccccc1S2(=O)=O)C(=O)Nc3ccccn3 
[-0.39585553] Cc3cc2nc1c(=O)[nH]c(=O)nc1n(CC(O)C(O)C(O)CO)c2cc3C
[-2.05306753] c1ccc(cc1)c2ccc(cc2)c3ccccc3
[-0.29666474] CC34CC(=O)C1C(CCC2=CC(=O)CCC12C)C3CCC4(=O) 
[-0.73213651] c1ccc2c(c1)sc3ccccc23
[-1.27744393] CC23Cc1cnoc1C=C2CCC4C3CCC5(C)C4CCC5(O)C#C
[0.0081655] OC(C(=O)c1ccccc1)c2ccccc2
[0.97588054] OCC2OC(Oc1ccccc1CO)C(O)C(O)C2O
[-0.10796031] CC3C2CCC1(C)C=CC(=O)C(=C1C2OC3=O)C
[0.59847167] O=Cc2ccc1OCOc1c2 
[-0.60149498] CC1CCCCC1NC(=O)Nc2ccccc2
[-0.34988907] CC(=O)N(S(=O)c1ccc(N)cc1)c2onc(C)c2C 
[0.34686576] C1N(C(=O)NCC(C)C)C(=O)NC1
[0.62750312] CNC(=O)Oc1ccccc1C2OCCO2
[0.14848418] CC1=C(CCCO1)C(=O)Nc2ccccc2 
[0.02268122] Cn2c(=O)on(c1ccc(Cl)c(Cl)c1)c2=O
[-0.85310089] C1Cc2cccc3cccc1c23
[-2.72079091] c1ccc2cc3c4cccc5cccc(c3cc2c1)c45
[0.42476682] Nc1cc(nc(N)n1=O)N2CCCCC2 
[0.01300407] O=c2c(C3CCCc4ccccc43)c(O)c1ccccc1o2 
[-2.4851523] CC(C)C(Nc1ccc(cc1Cl)C(F)(F)F)C(=O)OC(C#N)c2cccc(Oc3ccccc3)c2
[-2.15516147] Cc1c(F)c(F)c(COC(=O)C2C(C=C(Cl)C(F)(F)F)C2(C)C)c(F)c1F
[1.00975056] c2ccc1[nH]nnc1c2
[0.82588471] c2ccc1ocnc1c2
[-0.90390593] CCOC(=O)c1cncn1C(C)c2ccccc2
[-0.91067993] CCN2c1ccccc1N(C)C(=O)c3ccccc23 
[-0.82455329] OCC(O)COC(=O)c1ccccc1Nc2ccnc3cc(Cl)ccc23
[1.26909819] OCC1OC(OC2C(O)C(O)C(O)OC2CO)C(O)C(O)C1O
[-1.14825397] CC34CCc1c(ccc2cc(O)ccc12)C3CCC4=O
[-2.1343556] ClC1=C(Cl)C(Cl)(C(=C1Cl)Cl)C2(Cl)C(=C(Cl)C(=C2Cl)Cl)Cl
[-1.15744727] ClC1(C(=O)C2(Cl)C3(Cl)C14Cl)C5(Cl)C2(Cl)C3(Cl)C(Cl)(Cl)C45Cl
[-0.1045733] Oc1ccc(c(O)c1)c3oc2cc(O)cc(O)c2c(=O)c3O 
[0.53073162] C1SC(=S)NC1(=O)
[-1.22567118] ClC(Cl)C(Cl)(Cl)SN2C(=O)C1CC=CCC1C2=O 
[-1.66452995] ClC1=C(Cl)C2(Cl)C3C4CC(C=C4)C3C1(Cl)C2(Cl)Cl
[0.24525568] CC(=O)Nc1nnc(s1)S(N)(=O)=O 
[-0.13215318] CC1=C(SCCO1)C(=O)Nc2ccccc2
[-0.97067826] CN(C(=O)COc1nc2ccccc2s1)c3ccccc3
[-0.23376326] CN(C(=O)NC(C)(C)c1ccccc1)c2ccccc2
[1.21297072] Nc1nccs1 
[-1.2595412] CN(C=Nc1ccc(C)cc1C)C=Nc2ccc(C)cc2C
[0.49686159] OCC(O)C2OC1OC(OC1C2O)C(Cl)(Cl)Cl 
[0.22396595] Nc3nc(N)c2nc(c1ccccc1)c(N)nc2n3
[-0.44182199] CC2Nc1cc(Cl)c(cc1C(=O)N2c3ccccc3C)S(N)(=O)=O 
[0.47895886] CN1CC(O)N(C1=O)c2nnc(s2)C(C)(C)C
[0.08267956] CCC1(C(=O)NC(=O)NC1=O)C2=CCC3CCC2C3
[-1.51840498] CCC(C)C(=O)OC2CC(C)C=C3C=CC(C)C(CCC1CC(O)CC(=O)O1)C23 
[-0.34795364] CC2Cc1ccccc1N2NC(=O)c3ccc(Cl)c(c3)S(N)(=O)=O 
[-0.83858516] o1c2ccccc2c3ccccc13
[-0.13699176] O=C(Nc1ccccc1)Nc2ccccc2
[-2.59498796] c1ccc2c(c1)c3cccc4c3c2cc5ccccc54
[0.13106531] COc1ccc(cc1)C(O)(C2CC2)c3cncnc3 
[0.09042128] c1cnc2c(c1)ccc3ncccc23
[1.18877785] OCC1OC(CO)(OC2OC(COC3OC(CO)C(O)C(O)C3O)C(O)C(O)C2O)C(O)C1O
[-0.82697258] CCOC(=O)c1ccccc1S(=O)(=O)NN(C=O)c2nc(Cl)cc(OC)n2
[-1.16857599] CC34CCC1C(=CCc2cc(O)ccc12)C3CCC4=O
[0.37589721] CN(C)C(=O)Oc1cc(C)nn1c2ccccc2
[-0.24344041] OC(Cn1cncn1)(c2ccc(F)cc2)c3ccccc3F
[-2.00952036] Cc1c2ccccc2c(C)c3ccc4ccccc4c13
[-0.59181783] Cc3nnc4CN=C(c1ccccc1Cl)c2cc(Cl)ccc2n34
[-0.15634606] Cc3ccnc4N(C1CC1)c2ncccc2C(=O)Nc34 
[-2.87272217] c1cc2cccc3c4cccc5cccc(c(c1)c23)c54
[-0.34069577] COc1cc(cc(OC)c1O)C6C2C(COC2=O)C(OC4OC3COC(C)OC3C(O)C4O)c7cc5OCOc5cc67
[0.27622256] O=c1[nH]cnc2nc[nH]c12 
[-2.15467761] C1C(O)CCC2(C)CC3CCC4(C)C5(C)CC6OCC(C)CC6OC5CC4C3C=C21
[-0.02812382] Cc1ccccc1n3c(C)nc2ccccc2c3=O
[-2.77401524] CCOc1ccc(cc1)C(C)(C)COCc3cccc(Oc2ccccc2)c3
[0.25638441] CCC1(CCC(=O)NC1=O)c2ccccc2 
[0.84040043] CC1CC(C)C(=O)C(C1)C(O)CC2CC(=O)NC(=O)C2 
[-0.86277804] CC(=O)C3CCC4C2CC=C1CC(O)CCC1(C)C2CCC34C 
[-1.52082426] Cc1ccc(OP(=O)(Oc2cccc(C)c2)Oc3ccccc3C)cc1
[0.29702844] CSc1nnc(c(=O)n1N)C(C)(C)C
[0.44363727] Nc1ncnc2n(ccc12)C3OC(CO)C(O)C3O 
[0.47460415] O=C2NC(=O)C1(CC1)C(=O)N2 
[-0.08376743] C1Cc2ccccc2C1
[0.68556602] c1ccc2cnccc2c1
[0.79201468] OCC1OC(C(O)C1O)n2cnc3c(O)ncnc23
[-1.2401869] c2(Cl)c(Cl)c(Cl)c1nccnc1c2(Cl) 
[0.6129874] C1OC1c2ccccc2 
[-0.58214068] CCC(=C(CC)c1ccc(O)cc1)c2ccc(O)cc2 
[-1.51598569] c1ccc2c(c1)c3cccc4cccc2c34
[-1.93984487] CC(C)C(C(=O)OC(C#N)c1cccc(Oc2ccccc2)c1)c3ccc(OC(F)F)cc3
[-0.30295489] CCCC1COC(Cn2cncn2)(O1)c3ccc(Cl)cc3Cl
[-0.24827899] O=C2CN(N=Cc1ccc(o1)N(=O)=O)C(=O)N2 
[1.06442646] NC(=O)c1cnccn1
[-1.48259952] OC4=C(C1CCC(CC1)c2ccc(Cl)cc2)C(=O)c3ccccc3C4=O
[0.0275198] O=C(Cn1ccnc1N(=O)=O)NCc2ccccc2
[0.33718861] CCC1(C(=O)NC(=O)NC1=O)C2=CCCCC2 
[-0.91600236] COC(=O)C1=C(C)NC(=C(C1c2ccccc2N(=O)=O)C(=O)OC)C 
[0.58637523] O=C2NC(=O)C1(CCC1)C(=O)N2
[-0.62084928] CCCOP(=S)(OCCC)SCC(=O)N1CCCCC1C
[-0.30827732] N(c1ccccc1)c2ccccc2
[-1.95145746] ClC(Cl)=C(c1ccc(Cl)cc1)c2ccc(Cl)cc2
[-0.83568202] O=c2[nH]c1CCCc1c(=O)n2C3CCCCC3
[0.10977558] CCC1(C(=O)NCNC1=O)c2ccccc2
[1.90488697] O=C1CCCN1
[-0.75149081] COc5cc4OCC3Oc2c1CC(Oc1ccc2C(=O)C3c4cc5OC)C(C)=C 
[-1.65630437] ClC4=C(Cl)C5(Cl)C3C1CC(C2OC12)C3C4(Cl)C5(Cl)Cl
[0.74362893] c1ccsc1
[-2.42079925] c1ccc2c(c1)ccc3c2ccc4c5ccccc5ccc43
[-0.20957039] Cc1occc1C(=O)Nc2ccccc2
[1.01458914] OCC3OC(OCC2OC(OC(C#N)c1ccccc1)C(O)C(O)C2O)C(O)C(O)C3O 

先程と同じ溶解度の値( y 値)がそのIDとあわせて表示されています。

深層学習において、モデルの学習を行う際、サンプルをいくつかのかたまり(バッチ)にわけ、バッチ毎に学習を行うという手法(ミニバッチ学習)が一般的です。以下のように、iterbatches()を使うことで、どれだけのサンプルを1つのバッチとするかを指定することができます。

In [6]:
for X, y, w, ids in test_dataset.iterbatches(batch_size=50):
    print(y.shape)
(50, 1)
(50, 1)
(13, 1)

この例では、バッチサイズを50と指定することで、test_dataset の 113サンプルを50、50、13(残り)の3つのバッチに分割しています。

データにアクセスする最後の方法は、to_dataframe()です。これはデータをPandas の DataFrameにコピーします。この方法では、すべてのデータを一度にメモリに格納する必要があるので、小さなデータセットでのみ使用するようにしてください。

In [7]:
test_dataset.to_dataframe()
Out[7]:
Xywids
0<deepchem.feat.mol_graphs.ConvMol object at 0x…-1.6011451.0c1cc2ccc3cccc4ccc(c1)c2c34
1<deepchem.feat.mol_graphs.ConvMol object at 0x…0.2084831.0Cc1cc(=O)[nH]c(=S)[nH]1
2<deepchem.feat.mol_graphs.ConvMol object at 0x…-0.0160271.0Oc1ccc(cc1)C2(OC(=O)c3ccccc23)c4ccc(O)cc4
3<deepchem.feat.mol_graphs.ConvMol object at 0x…-2.8219171.0c1ccc2c(c1)cc3ccc4cccc5ccc2c3c45
4<deepchem.feat.mol_graphs.ConvMol object at 0x…-0.5289161.0C1=Cc2cccc3cccc1c23
108<deepchem.feat.mol_graphs.ConvMol object at 0x…-1.6563041.0ClC4=C(Cl)C5(Cl)C3C1CC(C2OC12)C3C4(Cl)C5(Cl)Cl
109<deepchem.feat.mol_graphs.ConvMol object at 0x…0.7436291.0c1ccsc1
110<deepchem.feat.mol_graphs.ConvMol object at 0x…-2.4207991.0c1ccc2c(c1)ccc3c2ccc4c5ccccc5ccc43
111<deepchem.feat.mol_graphs.ConvMol object at 0x…-0.2095701.0Cc1occc1C(=O)Nc2ccccc2
112<deepchem.feat.mol_graphs.ConvMol object at 0x…1.0145891.0OCC3OC(OCC2OC(OC(C#N)c1ccccc1)C(O)C(O)C2O)C(O)…

113 rows × 4 columns

Pandas はPython によるデータ分析に必須のライブラリです。下記の記事等も参考にして下さい。


データセットの作成

このチュートリアルの最後に、自前のデータセットを作成する方法をみてみます。”NumpyDataset”の作成はとても簡単で、データを含む配列をコンストラクタに渡すだけです。ランダムな配列を作成し、それを”NumpyDataset” にしてみましょう。

以下を実行してみてください。

In [8]:
import numpy as np

X = np.random.random((10, 5))
y = np.random.random((10, 2))
dataset = dc.data.NumpyDataset(X=X, y=y)
print(dataset)
<NumpyDataset X.shape: (10, 5), y.shape: (10, 2), w.shape: (10, 1), ids: [0 1 2 3 4 5 6 7 8 9], task_names: [0 1]>

この例では、重み w と ID を指定していません。これらはオプションであり、Xだけが必須です(y もオプションですが、今回は指定しています。)。重み w と ID をを省略したので,自動的に w と ids の配列が作成され,すべての重みは 1 に設定され,ID は整数列に設定されています。以下のように、dataframeで確認してみてください。

In [9]:
dataset.to_dataframe()
Out[9]:
X1X2X3X4X5y1y2wids
00.3377450.5173130.8130290.8871190.3788330.5689910.6261871.00
10.8810250.4027030.4716180.3523890.7912500.8014400.8005821.01
20.5085980.3286460.8423320.5922590.7170890.8009290.1751001.02
30.8682930.2783280.6742920.7145090.9728330.4849650.7459051.03
40.4586590.3056280.4698510.4818310.8720540.9411800.5825571.04
50.8139700.7814080.6263730.0849060.2711740.6451960.4811381.05
60.4983260.1790480.3813730.6099740.2394800.2256280.1760851.06
70.1537210.2983480.9682580.8380060.5089410.1890790.8032711.07
80.7543360.2759780.6596980.2991580.3267820.1606730.6657241.08
90.4889440.8303930.0251010.0048960.1516980.1087580.8788761.09

10サンプルからなる “NumpyDataset” が作成されていることが確認できました。

“DiskDataset”は、データがNumPyの配列であれば、DiskDataset.from_numpy()を呼び出すことで作成・保存することができます。このチュートリアルでは、以下のように、Python 標準ライブラリの tempfile を利用して、一時ディレクトリに保存しています。

In [10]:
import tempfile

with tempfile.TemporaryDirectory() as data_dir:
    disk_dataset = dc.data.DiskDataset.from_numpy(X=X, y=y, data_dir=data_dir)
    print(disk_dataset)
<DiskDataset X.shape: (10, 5), y.shape: (10, 2), w.shape: (10, 1), ids: [0 1 2 3 4 5 6 7 8 9], task_names: [0 1]>

メモリに収まりきらないような、ビッグデータの場合はどうしたらよいでしょうか。例えば、何億種類もの分子のデータが入った巨大なファイルをどのように扱えばよいでしょうか? このようなファイルからDiskDatasetを作成するプロセスは少し複雑ですが、DeepChemのDataLoader フレームワークで、作業を自動化することができます。これについては、 今後のチュートリアルで取り上げられます。


今回、チュートリアル2 Working With Datasets を通して、DeepChemのデータセットについて学びました。NumpyやPandasに慣れていれば、問題なく使用できそうですね。

コメント

タイトルとURLをコピーしました