{"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":11228175,"sourceType":"competition"}],"dockerImageVersionId":30918,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# RNA 3D Visualize","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom mpl_toolkits.mplot3d import Axes3D\nimport os\nimport imageio","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-05T15:36:47.714619Z","iopub.execute_input":"2025-03-05T15:36:47.714928Z","iopub.status.idle":"2025-03-05T15:36:47.719853Z","shell.execute_reply.started":"2025-03-05T15:36:47.714904Z","shell.execute_reply":"2025-03-05T15:36:47.718654Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df0=pd.read_csv('/kaggle/input/stanford-rna-3d-folding/train_labels.csv')\nprint(df0.columns.tolist())\ndf0['IDi']=df0['ID'].apply(lambda x:x.split('_')[0])\ndisplay(df0)\nunique_names = df0['IDi'].unique()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-05T15:36:47.721230Z","iopub.execute_input":"2025-03-05T15:36:47.721506Z","iopub.status.idle":"2025-03-05T15:36:47.991734Z","shell.execute_reply.started":"2025-03-05T15:36:47.721481Z","shell.execute_reply":"2025-03-05T15:36:47.990762Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"unique_resnames = df0['resname'].unique()\nprint(unique_resnames)\ncolors = plt.cm.jet(np.linspace(0, 1, len(unique_resnames)))\ncolor_map = dict(zip(unique_resnames, colors))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-05T15:36:47.999531Z","iopub.execute_input":"2025-03-05T15:36:47.999793Z","iopub.status.idle":"2025-03-05T15:36:48.029238Z","shell.execute_reply.started":"2025-03-05T15:36:47.999769Z","shell.execute_reply":"2025-03-05T15:36:48.027670Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create directory for images\nos.makedirs(\"frames\", exist_ok=True)\n\nfor i, name in enumerate(unique_names):\n    df = df0[df0['IDi'] == name]\n\n    # Create 3D plot\n    fig = plt.figure(figsize=(10,10))\n    ax = fig.add_subplot(111, projection='3d')\n\n    # Plot points\n    for resname in unique_resnames:\n        subset = df[df['resname'] == resname]\n        ax.scatter(subset['x_1'], subset['y_1'], subset['z_1'], label=resname, color=color_map[resname], alpha=0.3)\n\n    # Fix axis range\n    ax.set_xlim(-200,200)\n    ax.set_ylim(-200,200)\n    ax.set_zlim(-200,200)\n\n    # Labels & Legend\n    ax.set_xlabel('X')\n    ax.set_ylabel('Y')\n    ax.set_zlabel('Z')\n    ax.legend(title=name)\n\n    # Save figure\n    filename = f\"frames/frame_{i:03d}.png\"\n    plt.savefig(filename)\n    plt.close(fig)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-05T15:36:48.030394Z","iopub.execute_input":"2025-03-05T15:36:48.030767Z","iopub.status.idle":"2025-03-05T15:36:48.388207Z","shell.execute_reply.started":"2025-03-05T15:36:48.030724Z","shell.execute_reply":"2025-03-05T15:36:48.387076Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"image_files = sorted([f\"frames/{f}\" for f in os.listdir(\"frames\") if f.endswith(\".png\")])\n\n\ngif_filename = \"animation.gif\"\nwith imageio.get_writer(gif_filename, mode='I', duration=1.0, loop=0) as writer:  \n    for img_file in image_files:\n        image = imageio.imread(img_file)\n        writer.append_data(image)\n\nprint(\"GIF saved as\", gif_filename)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-05T15:36:48.389314Z","iopub.execute_input":"2025-03-05T15:36:48.389612Z","iopub.status.idle":"2025-03-05T15:36:48.451787Z","shell.execute_reply.started":"2025-03-05T15:36:48.389584Z","shell.execute_reply":"2025-03-05T15:36:48.450774Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from IPython.display import Image\nImage(open('./animation.gif','rb').read())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-05T15:36:48.452754Z","iopub.execute_input":"2025-03-05T15:36:48.453067Z","iopub.status.idle":"2025-03-05T15:36:48.460673Z","shell.execute_reply.started":"2025-03-05T15:36:48.453040Z","shell.execute_reply":"2025-03-05T15:36:48.459645Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}