| import argparse |
| import numpy as np |
| import pandas as pd |
|
|
| def main(): |
| parser = argparse.ArgumentParser(description='Convert smi file to csv file') |
| parser.add_argument('--in_path', '-i', type=str, default='data/GDB/GDB08.smi', help='input file') |
| parser.add_argument('--out_path_1', '-o1', type=str, default='data/gdb08_bert_train.csv', help='output file (train)') |
| parser.add_argument('--out_path_2', '-o2', type=str, default='data/gdb08_bert_test.csv', help='output file (test)') |
| parser.add_argument('--max', '-m', type=int, default=2e6, help='Maximum number of molecules') |
| args = parser.parse_args() |
| print('Input file: {}'.format(args.in_path)) |
| print('Start preprocessing') |
|
|
| smiles = [] |
| with open(args.in_path) as f: |
| lines = f.readlines() |
| for l in lines: |
| smiles.append(l.replace('\n', '')) |
| del lines |
| smiles = np.array(smiles) |
| N = len(smiles) |
| print('The dataset contains {} molecules'.format(N)) |
| |
| rands = np.random.choice(N, min(N,args.max), replace=False) |
| smiles_train = smiles[rands[:N//2]] |
| df_train = pd.DataFrame(data=smiles_train, columns=['canonical_smiles']) |
| df_train.to_csv(args.out_path_1, index=False) |
| del smiles_train, df_train |
| smiles_test = smiles[rands[N//2:]] |
| df_test = pd.DataFrame(data=smiles_test, columns=['canonical_smiles']) |
| df_test.to_csv(args.out_path_2, index=False) |
| print('Each set contains {} molecules'.format(N//2)) |
|
|
| if __name__=='__main__': |
| main() |