{"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":"none","dataSources":[{"sourceId":8678292,"sourceType":"datasetVersion","datasetId":5202104},{"sourceId":8694927,"sourceType":"datasetVersion","datasetId":5205859}],"dockerImageVersionId":30732,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"Setting up the Notebook","metadata":{}},{"cell_type":"code","source":"!pip install torchdrug duckdb\n\nimport duckdb\nimport torchdrug as td\nfrom torchdrug import data, transforms\nimport pandas as pd\nimport numpy as np\n","metadata":{"execution":{"iopub.status.busy":"2024-06-21T17:27:44.5736Z","iopub.execute_input":"2024-06-21T17:27:44.574008Z","iopub.status.idle":"2024-06-21T17:28:08.679218Z","shell.execute_reply.started":"2024-06-21T17:27:44.573972Z","shell.execute_reply":"2024-06-21T17:28:08.678113Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Loading dataset using DuckDB","metadata":{}},{"cell_type":"code","source":"csv_file = \"/kaggle/input/belka-training-data/train_BELKA_balanced.csv\"\n\nquery = \"SELECT * FROM read_csv_auto('{}') LIMIT 1000000\".format(csv_file)\ndf = duckdb.query(query).to_df()\n\nprint(df.head())\n","metadata":{"execution":{"iopub.status.busy":"2024-06-21T17:28:08.681593Z","iopub.execute_input":"2024-06-21T17:28:08.682333Z","iopub.status.idle":"2024-06-21T17:28:12.780076Z","shell.execute_reply.started":"2024-06-21T17:28:08.682275Z","shell.execute_reply":"2024-06-21T17:28:12.778852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Converting the Data to Molecule Objects using TorchDrug","metadata":{}},{"cell_type":"code","source":"smiles_list = df['molecule_smiles'].tolist()\n\nmolecules = [data.Molecule.from_smiles(smiles) for smiles in smiles_list]\n\nX = []\nfor molecule in molecules:\n    node_features = molecule.node_feature.numpy().flatten()\n    edge_features = molecule.edge_feature.numpy().flatten()\n    descriptor = np.concatenate((node_features, edge_features))\n    X.append(descriptor)\n\nmax_length = max(len(desc) for desc in X)\nX_padded = np.array([np.pad(desc, (0, max_length - len(desc)), 'constant') for desc in X])\n\nX = np.array(X_padded)\n\ny = df['protein_name'].tolist()\n\nprint(X)\nprint(y)","metadata":{"execution":{"iopub.status.busy":"2024-06-21T17:28:12.781271Z","iopub.execute_input":"2024-06-21T17:28:12.781595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Running a Classification Algorithm","metadata":{}},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import classification_report\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n\nclf = RandomForestClassifier(n_estimators=100, random_state=42)\nclf.fit(X_train, y_train)\n\ny_pred = clf.predict(X_test)\n\nprint(classification_report(y_test, y_pred))\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}