{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":67356,"databundleVersionId":8006601,"isSourceIdPinned":false,"sourceType":"competition"},{"sourceId":14487041,"sourceType":"datasetVersion","datasetId":9253052}],"dockerImageVersionId":30673,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"Published on April 05, 2024. By Marília Prata","metadata":{}},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.status.busy":"2026-01-13T15:40:01.281777Z","iopub.execute_input":"2026-01-13T15:40:01.282094Z","iopub.status.idle":"2026-01-13T15:40:02.270012Z","shell.execute_reply.started":"2026-01-13T15:40:01.282069Z","shell.execute_reply":"2026-01-13T15:40:02.269201Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGJd7r%2Fbtseqtm3y95%2FPvDLqGSXs7lELoEhDZHEgk%2Fimg.png)https://datainsider.tistory.com/142","metadata":{}},{"cell_type":"markdown","source":"\"DeepChem is a Python library for machine learning and deep learning on molecular and quantum datasets. It is built on top of PyTorch, and other popular ML frameworks. It is designed to make it easy to apply ML to new domains, and to build and benchmark new models. It is also designed to make it easy to use ML in production, by providing easy-to-use model export and deployment APIs.\"\n\nhttps://deepchem.io/about/","metadata":{}},{"cell_type":"markdown","source":"#DeepChem Citation:\n\n@manual{Intro1, \n\n title={The Basic Tools of the Deep Life Sciences}, \n organization={DeepChem},\n \n author={Ramsundar, Bharath}, \n \n howpublished = {\\url{https://github.com/deepchem/deepchem/blob/master/examples/tutorials/The_Basic_Tools_of_the_Deep_Life_Sciences.ipynb}}, \n year={2021}, \n} ","metadata":{}},{"cell_type":"code","source":"!pip install deepchem[tensorflow]","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2026-01-13T15:59:13.105594Z","iopub.execute_input":"2026-01-13T15:59:13.106457Z","iopub.status.idle":"2026-01-13T15:59:31.103183Z","shell.execute_reply.started":"2026-01-13T15:59:13.106428Z","shell.execute_reply":"2026-01-13T15:59:31.102231Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#By Salman Ibne Eunus https://www.kaggle.com/code/salmaneunus/prediction-solubility-of-molecules-with-deepchem\n\nimport deepchem as dc","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2026-01-13T15:59:31.104805Z","iopub.execute_input":"2026-01-13T15:59:31.105070Z","iopub.status.idle":"2026-01-13T15:59:49.046900Z","shell.execute_reply.started":"2026-01-13T15:59:31.105048Z","shell.execute_reply":"2026-01-13T15:59:49.045943Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import glob,os\nimport pandas as pd\nimport deepchem as dc\nimport numpy as np\nfrom rdkit import Chem\nfrom rdkit.Chem import AllChem\nfrom rdkit.Chem import Draw, PyMol, rdFMCS\nfrom rdkit.Chem.Draw import IPythonConsole\nfrom rdkit import rdBase\nfrom deepchem import metrics\nfrom IPython.display import Image, display\nfrom rdkit.Chem.Draw import SimilarityMaps\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-13T16:09:22.857257Z","iopub.execute_input":"2026-01-13T16:09:22.857590Z","iopub.status.idle":"2026-01-13T16:09:22.862616Z","shell.execute_reply.started":"2026-01-13T16:09:22.857567Z","shell.execute_reply":"2026-01-13T16:09:22.861779Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"DATASET_FILE ='/kaggle/input/yzcbattery/dataready_cleaned.csv'\nMODEL_DIR = 'temp_model'\n########################################Featurizerization#########################\nfeaturizer = dc.feat.ConvMolFeaturizer()\nloader = dc.data.CSVLoader(tasks=[\"col_4\"], feature_field=\"smiles\", featurizer=featurizer)\ndataset = loader.create_dataset(DATASET_FILE, shard_size=10000)\nprint(\"\\nLoad data successfully！\\n\")\nsplitter = dc.splits.splitters.RandomSplitter()\ntrainset, testset = splitter.train_test_split(dataset, frac_train=0.8, seed=1)\n","metadata":{"execution":{"iopub.status.busy":"2026-01-13T16:05:32.498774Z","iopub.execute_input":"2026-01-13T16:05:32.499623Z","iopub.status.idle":"2026-01-13T16:05:32.503514Z","shell.execute_reply.started":"2026-01-13T16:05:32.499594Z","shell.execute_reply":"2026-01-13T16:05:32.502565Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###########################################Two Conv.##########################################\n\"\"\"\ngraph_conv_layers: [64,64]\ndense_layer_size: 128\nbatch_size: 20\ndropout: 0.2\nnb_epoch: 1500\n\"\"\" \n\nimport time\n\nstart = time.time()\n\nmetrics_rmse_train = []\nmetrics_mae_train = []\nmetrics_r2_train = []\nmetrics_rmse_test = []\nmetrics_mae_test = []\nmetrics_r2_test = []\n\nfor i in range(5):   # five loops\n    print(\"Executing: %d/5\" %(i+1))\n    print(\"#\"*60)\n    MODEL_DIR = 'temp_model'\n    \n    if not os.path.exists(MODEL_DIR + '/2 layers/' + 'loop' + str(i+1)):\n        os.makedirs(MODEL_DIR + '/2 layers/' + 'loop' + str(i+1))\n    MODEL_DIR = MODEL_DIR + '/2 layers/' + 'loop' + str(i+1)\n\n    ########################################Model######################################\n    model = dc.models.GraphConvModel(1, \n              graph_conv_layers=[64,64],\n#               dense_layer_size =128,\n              mode=\"regression\",\n              batch_normalize=False,\n              batch_size=20,\n              model_dir=MODEL_DIR,\n              dropout=0.1,\n\n            )\n\n    ########################################Fit########################################\n    model.fit(trainset, nb_epoch=1000)\n\n    ########################################Predict####################################\n    test_pred = model.predict(testset)\n    train_pred = model.predict(trainset)\n\n    ########################################Metrics####################################\n    rmse = metrics.mean_squared_error(y_true=trainset.y, y_pred=train_pred, squared=False)   # RMSE\n    r2 = metrics.r2_score(y_true=trainset.y, y_pred=train_pred)\n    mae = metrics.mean_absolute_error(y_true=trainset.y, y_pred=train_pred)\n\n    rmse_test = metrics.mean_squared_error(y_true=testset.y, y_pred=test_pred, squared=False)   # RMSE\n    r2_test = metrics.r2_score(y_true=testset.y, y_pred=test_pred)\n    mae_test = metrics.mean_absolute_error(y_true=testset.y, y_pred=test_pred)\n\n    metrics_r2_train.append(r2)\n    metrics_rmse_train.append(rmse)\n    metrics_mae_train.append(mae)\n    metrics_r2_test.append(r2_test)\n    metrics_rmse_test.append(rmse_test)\n    metrics_mae_test.append(mae_test)\n\nend = time.time()\n\nprint(\"Time cost for GNN on polymer dataset: %.3f min\" % ((end-start)/60))\n\nprint(\"Train_R2: %.2f (+/- %.2f)\" % (np.mean(metrics_r2_train), np.std(metrics_r2_train)))\nprint(\"Train_RMSE: %.2f (+/- %.2f)\" % (np.mean(metrics_rmse_train), np.std(metrics_rmse_train)))\nprint(\"Train_MAE: %.2f (+/- %.2f)\" % (np.mean(metrics_mae_train), np.std(metrics_mae_train)))\n\nprint(\"Test_R2: %.2f (+/- %.2f)\" % (np.mean(metrics_r2_test), np.std(metrics_r2_test)))\nprint(\"Test_RMSE: %.2f (+/- %.2f)\" % (np.mean(metrics_rmse_test), np.std(metrics_rmse_test)))\nprint(\"Test_MAE: %.2f (+/- %.2f)\" % (np.mean(metrics_mae_test), np.std(metrics_mae_test)))","metadata":{"execution":{"iopub.status.busy":"2026-01-13T16:05:43.796541Z","iopub.execute_input":"2026-01-13T16:05:43.797360Z","iopub.status.idle":"2026-01-13T16:08:46.927165Z","shell.execute_reply.started":"2026-01-13T16:05:43.797332Z","shell.execute_reply":"2026-01-13T16:08:46.925966Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}