{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":87793,"databundleVersionId":11553390,"sourceType":"competition"}],"dockerImageVersionId":30918,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"* https://www.kaggle.com/code/olaflundstrom/stanford-rna-3d-folding-kaggle-competition\n* https://www.kaggle.com/code/chrisk321/rna-folding-submission-python\n* https://www.kaggle.com/code/michaelrowen/rna-folding-starter\n* Symbolic Regression https://medium.com/@wilstrup/symbolic-regression-a-simple-and-friendly-introduction-16bcadbe870a ","metadata":{}},{"cell_type":"markdown","source":"# Imports ","metadata":{}},{"cell_type":"code","source":"import pandas as pd \nimport numpy as np \nimport matplotlib.pyplot as plt\nimport time\nfrom tqdm import tqdm\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nimport xgboost as xgb\nfrom joblib import Parallel, delayed","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:20.917150Z","iopub.execute_input":"2025-04-02T12:13:20.917459Z","iopub.status.idle":"2025-04-02T12:13:24.481484Z","shell.execute_reply.started":"2025-04-02T12:13:20.917433Z","shell.execute_reply":"2025-04-02T12:13:24.480301Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Functions ","metadata":{}},{"cell_type":"code","source":"\ndef comparison_2_seq(seq_1, seq_2): \n\n    # sequence values \n    seq_1_x1_vals, seq_1_y1_vals, seq_1_z1_vals = seq_1['x_1'].values, seq_1['y_1'].values, seq_1['z_1'].values\n    seq_2_x1_vals, seq_2_y1_vals, seq_2_z1_vals = seq_2['x_1'].values, seq_2['y_1'].values, seq_2['z_1'].values\n\n    fig = plt.figure(figsize=(8, 6))\n    ax = fig.add_subplot(111, projection='3d')\n    \n    # Scatter plot for first subset\n    ax.scatter(seq_1_x1_vals, seq_1_y1_vals, seq_1_z1_vals, c='blue', s=50, marker='o', \n               label='Subset 1')\n    ax.plot(seq_1_x1_vals, seq_1_y1_vals, seq_1_z1_vals, color='blue', \n            linestyle='--', linewidth=2)\n    \n    # Scatter plot for second subset\n    ax.scatter(seq_2_x1_vals, seq_2_y1_vals, seq_2_z1_vals, c='orange', \n               s=50, marker='^', label='Subset 2')    \n    ax.plot(seq_2_x1_vals, seq_2_y1_vals, seq_2_z1_vals, color='orange', \n            linestyle='-', linewidth=2)\n    \n    # Labels and title\n    ax.set_title('3D Scatter Plot: Comparing Two Subsets')\n    ax.set_xlabel('X-axis')\n    ax.set_ylabel('Y-axis')\n    ax.set_zlabel('Z-axis')\n    ax.legend()\n    \n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.482612Z","iopub.execute_input":"2025-04-02T12:13:24.483136Z","iopub.status.idle":"2025-04-02T12:13:24.491102Z","shell.execute_reply.started":"2025-04-02T12:13:24.483104Z","shell.execute_reply":"2025-04-02T12:13:24.489634Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def analysis(df, drop_cols = None): \n    print(f\"Data Shape: {df.shape}\")\n    null_count = df.isnull().sum().sum()\n    print(f\"Null values: {null_count}\")\n    if null_count / df.shape[0] < 0.3: df = df.dropna()\n    else: df = df.fillna(0)\n\n    print(f\"Null values after processing: {df.isnull().sum().sum()}\")\n    if drop_cols: df = df.drop(columns=drop_cols)\n    print(f\"Data Shape: {df.shape}\")\n    df.info() \n    return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.492061Z","iopub.execute_input":"2025-04-02T12:13:24.492470Z","iopub.status.idle":"2025-04-02T12:13:24.520527Z","shell.execute_reply.started":"2025-04-02T12:13:24.492432Z","shell.execute_reply":"2025-04-02T12:13:24.519016Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def seq_map(seq):\n    return [seq_dict.get(char, 4) for char in seq][0]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.522119Z","iopub.execute_input":"2025-04-02T12:13:24.522580Z","iopub.status.idle":"2025-04-02T12:13:24.543946Z","shell.execute_reply.started":"2025-04-02T12:13:24.522540Z","shell.execute_reply":"2025-04-02T12:13:24.542507Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def fix_dataset(seq_df, labels_df=None):\n    data = {}\n    start_time = time.time()  # Start timing\n\n    for indx, row in tqdm(seq_df.iterrows(), total=len(seq_df), desc=\"Processing Sequences\"):\n        seq_id, seq, seq_len = row.target_id, row.sequence, row.sequence_legnth\n\n        # Convert sequence to numerical values\n        numerical_seq = [seq_map.get(nuc, 4) for nuc in seq]\n\n        # Count nucleotide occurrences using pandas' value_counts\n        counts = pd.Series(list(seq)).value_counts()\n        A_count = counts.get('A', 0)\n        C_count = counts.get('C', 0)\n        G_count = counts.get('G', 0)\n        U_count = counts.get('U', 0)\n\n        # Create DataFrame efficiently\n        df = pd.DataFrame({\n            'RNA_seq': numerical_seq,\n            'seq_len': range(seq_len),\n            'seq_id': [f\"{seq_id}_{i}\" for i in range(1, seq_len+1)],\n            'A_count': A_count,\n            'C_count': C_count,\n            'G_count': G_count,\n            'U_count': U_count} )\n\n        # Check for labels if they exist\n        if labels_df is not None:\n            seq_id_df = labels_df[labels_df['ID'].str.startswith(f\"{seq_id}_\")]\n\n            if not seq_id_df.empty:\n                coords = seq_id_df[['x_1', 'y_1', 'z_1']].to_numpy()\n                \n                if coords.shape[0] == seq_len:\n                    # Normalize coordinates efficiently\n                    mean = coords.mean(axis=0)\n                    std = coords.std(axis=0) + 1e-8  # Avoid division by zero\n                    coords_norm = (coords - mean) / std\n                    df[['x_1', 'y_1', 'z_1']] = coords_norm\n                else:\n                    print(f\"Warning: Mismatch for {seq_id} - coords: {coords.shape[0]}, seq_len: {seq_len}\")\n                    continue  \n        # Store processed DataFrame\n        data[seq_id] = df\n\n    # Merge all data after loop\n    merge_data = pd.concat(data.values(), ignore_index=True)\n    end_time = time.time()\n    print(f\"Total time taken: {end_time - start_time:.2f} seconds\")\n\n    return merge_data","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.545069Z","iopub.execute_input":"2025-04-02T12:13:24.545516Z","iopub.status.idle":"2025-04-02T12:13:24.572440Z","shell.execute_reply.started":"2025-04-02T12:13:24.545479Z","shell.execute_reply":"2025-04-02T12:13:24.570847Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def clean_data(data, remove_col, std_cols): \n    print(f'BEFORE Data:{data.shape}')\n    # Remove missing values\n    data = data.dropna().copy()  \n\n    # Remove and store the ID column efficiently\n    id_col = data.pop(remove_col)  \n\n    # StandardScaler\n    scaler = StandardScaler()\n    data[std_cols] = scaler.fit_transform(data[std_cols])\n    print(f'AFTER Data:{data.shape}')\n\n    return data, id_col","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.575324Z","iopub.execute_input":"2025-04-02T12:13:24.575694Z","iopub.status.idle":"2025-04-02T12:13:24.598841Z","shell.execute_reply.started":"2025-04-02T12:13:24.575665Z","shell.execute_reply":"2025-04-02T12:13:24.597465Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def model_prediction(df_train, df_val, target_data, **kwargs):\n    # Extract target values efficiently\n    y_train = df_train[target_data].to_numpy().T  # Shape (3, N)\n    y_val = df_val[target_data].to_numpy().T  # Shape (3, N)\n    X_train, X_val = df_train.drop(columns=target_data), df_val.drop(columns=target_data)\n\n    print(f'... Train:{X_train.shape, y_train.shape}')\n    print(f'... Validation:{X_val.shape, y_val.shape}')\n    \n    model_params = kwargs.get(\"model_params\", {})\n\n    # train a model for each coordinate\n    def train_model(coord_name, coord_values):\n        model = xgb.XGBRegressor(**model_params)\n        model.fit(X_train, coord_values)\n        return coord_name, model\n\n    # Train models with parallel training \n    models = dict(Parallel(n_jobs=-1)(\n        delayed(train_model)(coord_name, y) for coord_name, y in zip(['x', 'y', 'z'], y_train)))\n    print('... Models Trained')\n    \n    # Evaluate models\n    predictions = {}\n    for coord_name, model, y_true in zip(models.keys(), models.values(), y_val):\n        y_pred = model.predict(X_val)\n        predictions[coord_name]  = y_pred\n        mse = mean_squared_error(y_true, y_pred)\n        print(f'{coord_name} MSE: {mse:.4f}')\n\n    return models, predictions\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.601704Z","iopub.execute_input":"2025-04-02T12:13:24.602186Z","iopub.status.idle":"2025-04-02T12:13:24.622204Z","shell.execute_reply.started":"2025-04-02T12:13:24.602147Z","shell.execute_reply":"2025-04-02T12:13:24.620520Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def predict_vs_true(val_data, target_data,  predictions):\n    # target values \n    y_val = clean_val_data[target_data].to_numpy().T  \n    X_val = clean_val_data.drop(columns=target_data)\n    \n    \n    coordinates = ['x', 'y', 'z']\n    true_values = [y_val[0], y_val[1], y_val[2]]\n    pred_values = [predictions['x'], predictions['y'], predictions['z']]\n    \n    \n    fig, axes = plt.subplots(3, 1, figsize=(10, 15))\n    \n    # Loop to create the subplots for x, y, z\n    for i, coord in enumerate(coordinates):\n        axes[i].scatter(X_val.iloc[:, 1], true_values[i], color='blue', label=f'True {coord.upper()}')\n        axes[i].scatter(X_val.iloc[:, 1], pred_values[i], color='red', label=f'Predicted {coord.upper()}', marker='x')\n        axes[i].set_xlabel('Feature 1')\n        axes[i].set_ylabel(f'{coord.upper()} Coordinate')\n        axes[i].set_title(f'True vs Predicted {coord.upper()}')\n        axes[i].legend()\n    \n    plt.tight_layout()\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.623352Z","iopub.execute_input":"2025-04-02T12:13:24.623931Z","iopub.status.idle":"2025-04-02T12:13:24.647506Z","shell.execute_reply.started":"2025-04-02T12:13:24.623850Z","shell.execute_reply":"2025-04-02T12:13:24.646136Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Variables","metadata":{}},{"cell_type":"code","source":"drop_cols = ['temporal_cutoff', 'description', 'all_sequences']\nseq_map = {'A': 0, 'C': 1, 'G': 2, 'U': 3}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.648600Z","iopub.execute_input":"2025-04-02T12:13:24.649038Z","iopub.status.idle":"2025-04-02T12:13:24.673380Z","shell.execute_reply.started":"2025-04-02T12:13:24.648997Z","shell.execute_reply":"2025-04-02T12:13:24.671981Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"std_cols = ['seq_len', 'A_count', 'C_count', 'G_count', 'U_count']\nremove_col = 'seq_id'","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.674718Z","iopub.execute_input":"2025-04-02T12:13:24.675193Z","iopub.status.idle":"2025-04-02T12:13:24.693546Z","shell.execute_reply.started":"2025-04-02T12:13:24.675151Z","shell.execute_reply":"2025-04-02T12:13:24.692211Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"target_coord = ['x_1', 'y_1', 'z_1']\nparmas = {'objective':'reg:squarederror',\n        'n_estimators':1000,\n        'max_depth':7,\n        'learning_rate':0.1,\n        'subsample':0.8,\n        'colsample_bytree':0.8}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.694838Z","iopub.execute_input":"2025-04-02T12:13:24.695384Z","iopub.status.idle":"2025-04-02T12:13:24.717452Z","shell.execute_reply.started":"2025-04-02T12:13:24.695334Z","shell.execute_reply":"2025-04-02T12:13:24.716245Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Main","metadata":{}},{"cell_type":"code","source":"train_sequences = pd.read_csv('/kaggle/input/stanford-rna-3d-folding/train_sequences.csv')\ntrain_labels = pd.read_csv('/kaggle/input/stanford-rna-3d-folding/train_labels.csv')\n\nvalidation_sequences = pd.read_csv('/kaggle/input/stanford-rna-3d-folding/validation_sequences.csv')\nvalidation_labels = pd.read_csv('/kaggle/input/stanford-rna-3d-folding/validation_labels.csv')\n\ntest_sequences = pd.read_csv('/kaggle/input/stanford-rna-3d-folding/test_sequences.csv')\n#sample_submission = pd.read_csv('/kaggle/input/stanford-rna-3d-folding/sample_submission.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:24.718751Z","iopub.execute_input":"2025-04-02T12:13:24.719177Z","iopub.status.idle":"2025-04-02T12:13:25.345410Z","shell.execute_reply.started":"2025-04-02T12:13:24.719139Z","shell.execute_reply":"2025-04-02T12:13:25.343754Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_sequences = analysis(train_sequences, drop_cols=drop_cols)\ntrain_labels = analysis(train_labels)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:25.346781Z","iopub.execute_input":"2025-04-02T12:13:25.347244Z","iopub.status.idle":"2025-04-02T12:13:25.483163Z","shell.execute_reply.started":"2025-04-02T12:13:25.347205Z","shell.execute_reply":"2025-04-02T12:13:25.481914Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"validation_sequences = analysis(validation_sequences, drop_cols=drop_cols)\nvalidation_labels = analysis(validation_labels)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:25.484337Z","iopub.execute_input":"2025-04-02T12:13:25.484796Z","iopub.status.idle":"2025-04-02T12:13:25.521587Z","shell.execute_reply.started":"2025-04-02T12:13:25.484764Z","shell.execute_reply":"2025-04-02T12:13:25.520196Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_sequences = analysis(test_sequences, drop_cols=drop_cols)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:25.522701Z","iopub.execute_input":"2025-04-02T12:13:25.523130Z","iopub.status.idle":"2025-04-02T12:13:25.537861Z","shell.execute_reply.started":"2025-04-02T12:13:25.523084Z","shell.execute_reply":"2025-04-02T12:13:25.536551Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Pre-processing**\n* Kmers\n* lenght of the sequence\n","metadata":{}},{"cell_type":"code","source":"train_sequences['sequence_legnth'] = train_sequences['sequence'].str.len()\nvalidation_sequences['sequence_legnth'] = validation_sequences['sequence'].str.len()\ntest_sequences['sequence_legnth'] = test_sequences['sequence'].str.len()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:25.539273Z","iopub.execute_input":"2025-04-02T12:13:25.539680Z","iopub.status.idle":"2025-04-02T12:13:25.560595Z","shell.execute_reply.started":"2025-04-02T12:13:25.539640Z","shell.execute_reply":"2025-04-02T12:13:25.559259Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Visualize**","metadata":{}},{"cell_type":"code","source":"seq1_len, seq2_len = 28, 34\nx1 = train_labels[['x_1', 'y_1', 'z_1']].iloc[:seq1_len, :]\nx2 = train_labels[['x_1', 'y_1', 'z_1']].iloc[seq1_len:(seq1_len+seq2_len), :]\ncomparison_2_seq(x1, x2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:25.562000Z","iopub.execute_input":"2025-04-02T12:13:25.562406Z","iopub.status.idle":"2025-04-02T12:13:25.959547Z","shell.execute_reply.started":"2025-04-02T12:13:25.562365Z","shell.execute_reply":"2025-04-02T12:13:25.958509Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**PreProcesed**","metadata":{}},{"cell_type":"code","source":"print('.... Train Data Procesed')\ntrain_data  = fix_dataset(seq_df=train_sequences, labels_df=train_labels)\n\nprint('.... Validation Data Procesed')\nval_data  = fix_dataset(seq_df=validation_sequences, labels_df=validation_labels)\n\nprint('.... Test Data Procesed')\ntest_data  = fix_dataset(seq_df=test_sequences, labels_df=None)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:25.960375Z","iopub.execute_input":"2025-04-02T12:13:25.960758Z","iopub.status.idle":"2025-04-02T12:13:57.895033Z","shell.execute_reply.started":"2025-04-02T12:13:25.960724Z","shell.execute_reply":"2025-04-02T12:13:57.893723Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Clean Data**","metadata":{}},{"cell_type":"code","source":" print('... Clean Train Data')\nclean_train_data, _ = clean_data(data = train_data, \n                              remove_col = remove_col, \n                              std_cols =  std_cols)\nprint('... Clean Validation Data')\nclean_val_data, _ = clean_data(data = val_data, \n                              remove_col = remove_col, \n                              std_cols =  std_cols)\n\nprint('... Clean Test Data')\nclean_test_data, unseen_id = clean_data(data = test_data, \n                              remove_col = remove_col, \n                              std_cols =  std_cols)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:57.896232Z","iopub.execute_input":"2025-04-02T12:13:57.896615Z","iopub.status.idle":"2025-04-02T12:13:57.984952Z","shell.execute_reply.started":"2025-04-02T12:13:57.896577Z","shell.execute_reply":"2025-04-02T12:13:57.983781Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Train XGBoost Regression Models for each Coordinate**","metadata":{}},{"cell_type":"code","source":"train_models, predictions = model_prediction(df_train = clean_train_data, \n                                df_val = clean_val_data,  \n                                target_data = target_coord, \n                                **parmas)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:13:57.988826Z","iopub.execute_input":"2025-04-02T12:13:57.989254Z","iopub.status.idle":"2025-04-02T12:14:00.727289Z","shell.execute_reply.started":"2025-04-02T12:13:57.989223Z","shell.execute_reply":"2025-04-02T12:14:00.725929Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**True Vs Prediction Values**","metadata":{}},{"cell_type":"code","source":"predict_vs_true(val_data = clean_val_data,\n                target_data = target_coord, \n                predictions = predictions)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:14:00.729185Z","iopub.execute_input":"2025-04-02T12:14:00.729501Z","iopub.status.idle":"2025-04-02T12:14:01.827474Z","shell.execute_reply.started":"2025-04-02T12:14:00.729471Z","shell.execute_reply":"2025-04-02T12:14:01.826103Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"x_model, y_model, z_model  = train_models['x'], train_models['y'], train_models['z']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:14:01.828449Z","iopub.execute_input":"2025-04-02T12:14:01.828743Z","iopub.status.idle":"2025-04-02T12:14:01.833799Z","shell.execute_reply.started":"2025-04-02T12:14:01.828714Z","shell.execute_reply":"2025-04-02T12:14:01.832442Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"x_1, y_1, z_1 = x_model.predict(clean_test_data), y_model.predict(clean_test_data), z_model.predict(clean_test_data)\nx_2, y_2, z_2 = x_model.predict(clean_test_data), y_model.predict(clean_test_data), z_model.predict(clean_test_data)\nx_3, y_3, z_3 = x_model.predict(clean_test_data), y_model.predict(clean_test_data), z_model.predict(clean_test_data)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:14:01.835184Z","iopub.execute_input":"2025-04-02T12:14:01.835520Z","iopub.status.idle":"2025-04-02T12:14:01.905556Z","shell.execute_reply.started":"2025-04-02T12:14:01.835493Z","shell.execute_reply":"2025-04-02T12:14:01.904542Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"inverse_seq_map = {0:'A', 1:'C', 2:'G', 3:'U'}\nseq_len = test_data['seq_len']\nresname = clean_test_data['RNA_seq'].map(inverse_seq_map)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:14:01.906719Z","iopub.execute_input":"2025-04-02T12:14:01.907551Z","iopub.status.idle":"2025-04-02T12:14:01.915710Z","shell.execute_reply.started":"2025-04-02T12:14:01.907515Z","shell.execute_reply":"2025-04-02T12:14:01.914448Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_sub = pd.read_csv('/kaggle/input/stanford-rna-3d-folding/sample_submission.csv')\nid_s, resname_seq, resid_seq = sample_sub.ID, sample_sub.resname, sample_sub.resid","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:15:13.619436Z","iopub.execute_input":"2025-04-02T12:15:13.619826Z","iopub.status.idle":"2025-04-02T12:15:13.639412Z","shell.execute_reply.started":"2025-04-02T12:15:13.619792Z","shell.execute_reply":"2025-04-02T12:15:13.638340Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.DataFrame({'ID':id_s,\n                          'resname':resname_seq, \n                          'resid':resid_seq, \n    'x_1': x_model.predict(clean_test_data),\n    'y_1': y_model.predict(clean_test_data),\n    'z_1': z_model.predict(clean_test_data),\n                           \n    'x_2': x_model.predict(clean_test_data),\n    'y_2': y_model.predict(clean_test_data),\n    'z_2': z_model.predict(clean_test_data),\n                           \n    'x_3': x_model.predict(clean_test_data),\n    'y_3': y_model.predict(clean_test_data),\n    'z_3': z_model.predict(clean_test_data),\n                           \n    'x_4': x_model.predict(clean_test_data),\n    'y_4': y_model.predict(clean_test_data),\n    'z_4': z_model.predict(clean_test_data),\n                           \n    'x_5': x_model.predict(clean_test_data),\n    'y_5': y_model.predict(clean_test_data),\n    'z_5': z_model.predict(clean_test_data),\n})","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:15:15.492379Z","iopub.execute_input":"2025-04-02T12:15:15.492765Z","iopub.status.idle":"2025-04-02T12:15:15.574168Z","shell.execute_reply.started":"2025-04-02T12:15:15.492731Z","shell.execute_reply":"2025-04-02T12:15:15.572854Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-02T12:15:30.724437Z","iopub.execute_input":"2025-04-02T12:15:30.724767Z","iopub.status.idle":"2025-04-02T12:15:30.784421Z","shell.execute_reply.started":"2025-04-02T12:15:30.724741Z","shell.execute_reply":"2025-04-02T12:15:30.783029Z"}},"outputs":[],"execution_count":null}]}