{"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":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"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)\nimport matplotlib.pyplot as plt\nfrom mpl_toolkits.mplot3d import Axes3D\nimport seaborn as sns\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split, cross_val_score\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.tree import DecisionTreeClassifier\nfrom keras.preprocessing.sequence import pad_sequences\nfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, roc_curve, auc\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\nfolder_path = '/kaggle/input/stanford-rna-3d-folding/MSA/'\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","trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:05.019355Z","iopub.execute_input":"2025-03-29T21:28:05.019686Z","iopub.status.idle":"2025-03-29T21:28:05.577052Z","shell.execute_reply.started":"2025-03-29T21:28:05.019661Z","shell.execute_reply":"2025-03-29T21:28:05.575940Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 1 - EDA - Exploratory Data Analysis","metadata":{}},{"cell_type":"markdown","source":"#### 1 - 1 Charger les données ","metadata":{}},{"cell_type":"code","source":"train_sequences = pd.read_csv(\"/kaggle/input/stanford-rna-3d-folding/train_sequences.csv\")\nvalidation_sequences = pd.read_csv(\"/kaggle/input/stanford-rna-3d-folding/validation_sequences.csv\")\ntest_sequences = pd.read_csv(\"/kaggle/input/stanford-rna-3d-folding/test_sequences.csv\")\n\ntrain_labels = pd.read_csv(\"/kaggle/input/stanford-rna-3d-folding/train_labels.csv\")\nvalidation_labels = pd.read_csv(\"/kaggle/input/stanford-rna-3d-folding/validation_labels.csv\")\n\nsample_submission = pd.read_csv(\"/kaggle/input/stanford-rna-3d-folding/sample_submission.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:05.578510Z","iopub.execute_input":"2025-03-29T21:28:05.578890Z","iopub.status.idle":"2025-03-29T21:28:05.854114Z","shell.execute_reply.started":"2025-03-29T21:28:05.578849Z","shell.execute_reply":"2025-03-29T21:28:05.853170Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 2 - Visualisation des premiers lignes","metadata":{}},{"cell_type":"code","source":"# train_sequences\nprint(f\"train_sequences :\", train_sequences.head())\n\n# train_labels\nprint(\"train_labels :\", train_labels.head())\n\n# validation_sequences\nprint(\"validation_sequences :\", validation_sequences.head())\n\n# validation_labels\nprint(\"validation_labels :\", validation_labels.head())\n\n#test_sequences\nprint(\"test_sequences :\", test_sequences.head())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:05.855911Z","iopub.execute_input":"2025-03-29T21:28:05.856271Z","iopub.status.idle":"2025-03-29T21:28:05.884056Z","shell.execute_reply.started":"2025-03-29T21:28:05.856246Z","shell.execute_reply":"2025-03-29T21:28:05.882738Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 3 - Dimensions des fichiers","metadata":{}},{"cell_type":"code","source":"print(train_sequences.shape, train_labels.shape)\nprint(validation_sequences.shape, validation_labels.shape)\nprint(test_sequences.shape)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:05.885694Z","iopub.execute_input":"2025-03-29T21:28:05.886048Z","iopub.status.idle":"2025-03-29T21:28:05.905458Z","shell.execute_reply.started":"2025-03-29T21:28:05.886005Z","shell.execute_reply":"2025-03-29T21:28:05.904385Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 4 - Colonnes ","metadata":{}},{"cell_type":"code","source":"print(train_sequences.columns)\nprint(train_labels.columns)\n\nprint(validation_sequences.columns)\nprint(validation_labels.columns)\n\nprint(test_sequences.columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:05.906637Z","iopub.execute_input":"2025-03-29T21:28:05.907036Z","iopub.status.idle":"2025-03-29T21:28:05.927981Z","shell.execute_reply.started":"2025-03-29T21:28:05.906999Z","shell.execute_reply":"2025-03-29T21:28:05.926821Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 5 - Comparer les premières valeurs de chaque colonne","metadata":{}},{"cell_type":"code","source":"print(train_sequences['target_id'].head())\nprint(train_labels['ID'].head())\n\nprint(validation_sequences['target_id'].head())\nprint(validation_labels['ID'].head())\n\nprint(test_sequences['target_id'].head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:05.928985Z","iopub.execute_input":"2025-03-29T21:28:05.929319Z","iopub.status.idle":"2025-03-29T21:28:05.953152Z","shell.execute_reply.started":"2025-03-29T21:28:05.929295Z","shell.execute_reply":"2025-03-29T21:28:05.951983Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 6 - Nettoyer les identifiants en supprimant les espaces et en les mettant en majuscule","metadata":{}},{"cell_type":"code","source":"train_sequences['target_id'] = train_sequences['target_id'].str.strip().str.upper()\ntrain_labels['ID'] = train_labels['ID'].str.strip().str.upper()\n\nvalidation_sequences['target_id'] = validation_sequences['target_id'].str.strip().str.upper()\nvalidation_labels['ID'] = validation_labels['ID'].str.strip().str.upper()\n\ntest_sequences['target_id'] = test_sequences['target_id'].str.strip().str.upper()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:05.954255Z","iopub.execute_input":"2025-03-29T21:28:05.954512Z","iopub.status.idle":"2025-03-29T21:28:06.059666Z","shell.execute_reply.started":"2025-03-29T21:28:05.954491Z","shell.execute_reply":"2025-03-29T21:28:06.058742Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 7 - Nettoyer les identifiants dans train_labels['ID'] en supprimant le suffixe \"_n\"","metadata":{}},{"cell_type":"code","source":"train_labels['ID'] = train_labels['ID'].str.extract(r'([A-Za-z0-9_]+)_')[0]\n\nvalidation_labels['ID'] = validation_labels['ID'].str.extract(r'([A-Za-z0-9_]+)_')[0]\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:06.062154Z","iopub.execute_input":"2025-03-29T21:28:06.062432Z","iopub.status.idle":"2025-03-29T21:28:06.269159Z","shell.execute_reply.started":"2025-03-29T21:28:06.062410Z","shell.execute_reply":"2025-03-29T21:28:06.268277Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 8 - Vérifie si les identifiants sont maintenant compatibles","metadata":{}},{"cell_type":"code","source":"print(set(train_labels['ID']).issubset(set(train_sequences['target_id'])))\n\nprint(set(validation_labels['ID']).issubset(set(validation_sequences['target_id'])))\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 9 - Fusionner les données en utilisant 'ID' et 'target_id'","metadata":{}},{"cell_type":"code","source":"train_data = pd.merge(train_sequences, train_labels, left_on='target_id', right_on='ID', how='inner')\n\nvalidation_data = pd.merge(validation_sequences, validation_labels, left_on='target_id', right_on='ID', how='inner')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:06.299950Z","iopub.execute_input":"2025-03-29T21:28:06.300367Z","iopub.status.idle":"2025-03-29T21:28:06.374309Z","shell.execute_reply.started":"2025-03-29T21:28:06.300337Z","shell.execute_reply":"2025-03-29T21:28:06.373539Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 10 - Afficher les premières lignes du DataFrame fusionné pour vérification","metadata":{}},{"cell_type":"code","source":"print(f\" La fusion entre train_sequences et train_labels :{train_data.head()}\")\n\nprint(f\" La fusion entre validation_sequences et validation_labels :{validation_data.head()}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:06.375334Z","iopub.execute_input":"2025-03-29T21:28:06.375618Z","iopub.status.idle":"2025-03-29T21:28:06.396531Z","shell.execute_reply.started":"2025-03-29T21:28:06.375595Z","shell.execute_reply":"2025-03-29T21:28:06.395459Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 11 - Verification des doublons","metadata":{}},{"cell_type":"code","source":"print(f\"Doublons dans train_sequences: {train_data.duplicated().sum()}\")\n\nprint(f\"Doublons dans validation_data: {validation_data.duplicated().sum()}\")\n\nprint(f\"Doublons dans test_sequences: {test_sequences.duplicated().sum()}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:06.397516Z","iopub.execute_input":"2025-03-29T21:28:06.397913Z","iopub.status.idle":"2025-03-29T21:28:06.843257Z","shell.execute_reply.started":"2025-03-29T21:28:06.397859Z","shell.execute_reply":"2025-03-29T21:28:06.842228Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 12 - Verification des types des donnees","metadata":{}},{"cell_type":"code","source":"# train_sequences\nprint(\"train_data :\")\nprint(train_data.info())\n\n# validation_sequences\nprint(\"validation_data :\")\nprint(validation_data.info())\n\n# test_sequences\nprint(\"test_sequences :\")\nprint(test_sequences.info())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:06.844267Z","iopub.execute_input":"2025-03-29T21:28:06.844593Z","iopub.status.idle":"2025-03-29T21:28:06.914927Z","shell.execute_reply.started":"2025-03-29T21:28:06.844567Z","shell.execute_reply":"2025-03-29T21:28:06.913783Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 13 - Valeurs manquantes\n","metadata":{}},{"cell_type":"code","source":"# train_sequences\nprint(\"Nombre total de valeurs manqauntes train_data :\")\nprint(train_data.isnull().sum().sum())\nprint(train_data.isnull().sum())\n\n\n# validation_sequences\nprint(\"Nombre total de valeurs manqauntes validation_data :\")\nprint(validation_data.isnull().sum().sum())\nprint(validation_data.isnull().sum())\n\n# test_sequences\nprint(\"Nombre total de valeurs manqauntes test_sequences :\")\nprint(test_sequences.isnull().sum().sum())\nprint(test_sequences.isnull().sum())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:06.916001Z","iopub.execute_input":"2025-03-29T21:28:06.916346Z","iopub.status.idle":"2025-03-29T21:28:07.038806Z","shell.execute_reply.started":"2025-03-29T21:28:06.916320Z","shell.execute_reply":"2025-03-29T21:28:07.037823Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 14 - Statistiques generale","metadata":{}},{"cell_type":"code","source":"# train_data\nprint(\"train_data :\")\nprint(train_data.describe())\n\n# validation_data\nprint(\"validation_data :\")\nprint(validation_data.describe())\n\n# test_sequences\nprint(\"test_sequences :\")\nprint(test_sequences.describe())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.039771Z","iopub.execute_input":"2025-03-29T21:28:07.040059Z","iopub.status.idle":"2025-03-29T21:28:07.261372Z","shell.execute_reply.started":"2025-03-29T21:28:07.040035Z","shell.execute_reply":"2025-03-29T21:28:07.260406Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 15 - Verification des dimensions des donnees","metadata":{}},{"cell_type":"code","source":"print(f\"Train sequences shape: {train_data.shape}\")\n\nprint(f\"Validation sequences shape: {validation_data.shape}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.262722Z","iopub.execute_input":"2025-03-29T21:28:07.263072Z","iopub.status.idle":"2025-03-29T21:28:07.269099Z","shell.execute_reply.started":"2025-03-29T21:28:07.263044Z","shell.execute_reply":"2025-03-29T21:28:07.267762Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 16 - Nombres de colonnes apres le fusion","metadata":{}},{"cell_type":"code","source":"print(train_data.columns)\nprint(validation_data.columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.270487Z","iopub.execute_input":"2025-03-29T21:28:07.270937Z","iopub.status.idle":"2025-03-29T21:28:07.290598Z","shell.execute_reply.started":"2025-03-29T21:28:07.270845Z","shell.execute_reply":"2025-03-29T21:28:07.289387Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 2 - Data Cleaning","metadata":{}},{"cell_type":"markdown","source":"#### 2 - 1 - Remplacement par mediane","metadata":{}},{"cell_type":"code","source":"# train_labels\ntrain_data['x_1'] == train_data['x_1'].fillna(train_data['x_1'].median(), inplace=True)\nprint(\"Nombre des valeurs manquantes de cahque colonne :\",train_data.isnull().sum())\n\n# train_labels\ntrain_data['y_1'] == train_data['y_1'].fillna(train_data['y_1'].median(), inplace=True)\nprint(\"Nombre des valeurs manquantes de cahque colonne :\",train_data.isnull().sum())\n\n# train_labels\ntrain_data['z_1'] == train_data['z_1'].fillna(train_data['z_1'].median(), inplace=True)\nprint(\"Nombre des valeurs manquantes de cahque colonne :\",train_data.isnull().sum())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.292063Z","iopub.execute_input":"2025-03-29T21:28:07.292423Z","iopub.status.idle":"2025-03-29T21:28:07.480935Z","shell.execute_reply.started":"2025-03-29T21:28:07.292395Z","shell.execute_reply":"2025-03-29T21:28:07.479891Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 2 - 2 - Completion de all_sequences avec la valeur la plus frequente","metadata":{}},{"cell_type":"code","source":"# Train_data\nmode_sequences = train_data['all_sequences'].mode()[0]\ntrain_data['all_sequences'] = train_data['all_sequences'].fillna(mode_sequences)\nprint(\"Nombre des valeurs manquantes de chaque colonne :\",train_data.isnull().sum())\nprint(\"Nombre total de valeurs manqauntes :\", train_data.isnull().sum().sum())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.481974Z","iopub.execute_input":"2025-03-29T21:28:07.482317Z","iopub.status.idle":"2025-03-29T21:28:07.616942Z","shell.execute_reply.started":"2025-03-29T21:28:07.482290Z","shell.execute_reply":"2025-03-29T21:28:07.615977Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 2 - 3 - Nombres de colonnes ","metadata":{}},{"cell_type":"code","source":"print(train_data.columns)\nprint(validation_data.columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.617806Z","iopub.execute_input":"2025-03-29T21:28:07.618097Z","iopub.status.idle":"2025-03-29T21:28:07.623801Z","shell.execute_reply.started":"2025-03-29T21:28:07.618075Z","shell.execute_reply":"2025-03-29T21:28:07.622745Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 2 - 4 - Types de donnees","metadata":{}},{"cell_type":"code","source":"print(train_data.dtypes)\nprint(validation_data.dtypes)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.624779Z","iopub.execute_input":"2025-03-29T21:28:07.625171Z","iopub.status.idle":"2025-03-29T21:28:07.647112Z","shell.execute_reply.started":"2025-03-29T21:28:07.625144Z","shell.execute_reply":"2025-03-29T21:28:07.645847Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.648176Z","iopub.execute_input":"2025-03-29T21:28:07.648439Z","iopub.status.idle":"2025-03-29T21:28:07.679492Z","shell.execute_reply.started":"2025-03-29T21:28:07.648418Z","shell.execute_reply":"2025-03-29T21:28:07.678429Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 3 - Visualisation","metadata":{}},{"cell_type":"markdown","source":"#### 1 - 1 - Visualisation de la distribution des nucléotides (A, C, G, U)","metadata":{}},{"cell_type":"code","source":"sequences = train_data['sequence']\n\nnucleotides = ['A', 'C', 'G', 'U']\nnucleotide_counts = {n: sequences.str.count(n).sum() for n in nucleotides}\n\nsns.barplot(x=list(nucleotide_counts.keys()), y=list(nucleotide_counts.values()))\nplt.title('Distribution des nucléotides dans les séquences d\\'ARN')\nplt.xlabel('Nucléotide')\nplt.ylabel('Fréquence')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:07.683884Z","iopub.execute_input":"2025-03-29T21:28:07.684192Z","iopub.status.idle":"2025-03-29T21:28:24.079108Z","shell.execute_reply.started":"2025-03-29T21:28:07.684167Z","shell.execute_reply":"2025-03-29T21:28:24.077899Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 2 - Visualisation de la distribution des résidus dans train_labels","metadata":{}},{"cell_type":"code","source":"\nresidue_counts = train_data['resname'].value_counts()\n\nsns.barplot(x=residue_counts.index, y=residue_counts.values)\nplt.title('Distribution des résidus dans les labels d\\'entraînement')\nplt.xlabel('Résidu')\nplt.ylabel('Fréquence')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:24.081205Z","iopub.execute_input":"2025-03-29T21:28:24.081473Z","iopub.status.idle":"2025-03-29T21:28:24.298854Z","shell.execute_reply.started":"2025-03-29T21:28:24.081453Z","shell.execute_reply":"2025-03-29T21:28:24.297623Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 3 - Visualisation des coordonnées 3D des atomes","metadata":{}},{"cell_type":"code","source":"subset_labels = train_data.iloc[:10]\n\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\n\nax.scatter(subset_labels['x_1'], subset_labels['y_1'], subset_labels['z_1'], c='r', marker='o')\n\nax.set_xlabel('X')\nax.set_ylabel('Y')\nax.set_zlabel('Z')\nax.set_title('Coordonnées 3D des atomes')\n\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:24.300146Z","iopub.execute_input":"2025-03-29T21:28:24.300511Z","iopub.status.idle":"2025-03-29T21:28:24.490926Z","shell.execute_reply.started":"2025-03-29T21:28:24.300483Z","shell.execute_reply":"2025-03-29T21:28:24.489570Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 4 - Visualisation de la longueur des séquences","metadata":{}},{"cell_type":"code","source":"\nsequence_lengths = sequences.str.len()\n\nplt.hist(sequence_lengths, bins=30, color='skyblue', edgecolor='black')\nplt.title('Distribution des longueurs des séquences d\\'ARN')\nplt.xlabel('Longueur de la séquence')\nplt.ylabel('Fréquence')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:24.492118Z","iopub.execute_input":"2025-03-29T21:28:24.492512Z","iopub.status.idle":"2025-03-29T21:28:24.772139Z","shell.execute_reply.started":"2025-03-29T21:28:24.492475Z","shell.execute_reply":"2025-03-29T21:28:24.771040Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 5 - Visualisation des types de nucléotides dans les séquences de validation","metadata":{}},{"cell_type":"code","source":"\nvalidation_data_types = validation_data['sequence']\n\nvalidation_nucleotide_counts = {n: validation_data_types.str.count(n).sum() for n in nucleotides}\n\nsns.barplot(x=list(validation_nucleotide_counts.keys()), y=list(validation_nucleotide_counts.values()))\nplt.title('Distribution des nucléotides dans les séquences de validation')\nplt.xlabel('Nucléotide')\nplt.ylabel('Fréquence')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:24.773147Z","iopub.execute_input":"2025-03-29T21:28:24.773500Z","iopub.status.idle":"2025-03-29T21:28:25.009561Z","shell.execute_reply.started":"2025-03-29T21:28:24.773474Z","shell.execute_reply":"2025-03-29T21:28:25.008336Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 1 - 6 - Visualisation des coordonnées des atomes dans validation_labels","metadata":{}},{"cell_type":"code","source":"\nsubset_validation_labels = validation_data.iloc[:10]\n\nfig = plt.figure()\nax = fig.add_subplot(111, projection='3d')\n\nax.scatter(subset_validation_labels['x_1'], subset_validation_labels['y_1'], subset_validation_labels['z_1'], c='b', marker='o')\n\nax.set_xlabel('X')\nax.set_ylabel('Y')\nax.set_zlabel('Z')\nax.set_title('Coordonnées 3D des atomes dans les labels de validation')\n\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:25.010578Z","iopub.execute_input":"2025-03-29T21:28:25.010920Z","iopub.status.idle":"2025-03-29T21:28:25.198756Z","shell.execute_reply.started":"2025-03-29T21:28:25.010892Z","shell.execute_reply":"2025-03-29T21:28:25.197761Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":" # 3 - Data Preprocessing","metadata":{}},{"cell_type":"markdown","source":"#### 3 - 1 - Encodage One-Hot des Séquences train_data","metadata":{}},{"cell_type":"code","source":"def one_hot_encode(sequence):\n    encoding = {'A': [1, 0, 0, 0],\n                'C': [0, 1, 0, 0],\n                'G': [0, 0, 1, 0],\n                'U': [0, 0, 0, 1]}\n    \n    sequence = sequence.replace('-', '') \n\n    sequence = [nt for nt in sequence if nt in encoding]\n    \n    return [encoding[nt] for nt in sequence]\n\nencoded_sequences = [one_hot_encode(seq) for seq in train_data['sequence']]\n\nmax_sequence_length = max([len(seq) for seq in encoded_sequences])\n\npadded_sequences = pad_sequences(encoded_sequences, maxlen=max_sequence_length, padding='post', dtype='float32')\n\ntrain_data['encoded_sequence'] = list(padded_sequences)\n\nprint(train_data[['sequence', 'encoded_sequence']].head())\ntrain_data","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-29T21:28:25.199907Z","iopub.execute_input":"2025-03-29T21:28:25.200244Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 2 - Encodage One-Hot des Séquences validation_data","metadata":{}},{"cell_type":"code","source":"def one_hot_encode(sequence):\n    encoding = {'A': [1, 0, 0, 0],\n                'C': [0, 1, 0, 0],\n                'G': [0, 0, 1, 0],\n                'U': [0, 0, 0, 1]}\n    \n    sequence = sequence.replace('-', '') \n\n    sequence = [nt for nt in sequence if nt in encoding]\n    \n    return [encoding[nt] for nt in sequence]\n\nencoded_sequences = [one_hot_encode(seq) for seq in validation_data['sequence']]\n\nmax_sequence_length = max([len(seq) for seq in encoded_sequences])\n\npadded_sequences = pad_sequences(encoded_sequences, maxlen=max_sequence_length, padding='post', dtype='float32')\n\nvalidation_data['encoded_sequence'] = list(padded_sequences)\n\nprint(validation_data[['sequence', 'encoded_sequence']].head())\nvalidation_data","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 4 - Standarisation des valeurs numeriques de train_data","metadata":{}},{"cell_type":"code","source":"scaler = StandardScaler()\ntrain_data[['x_1', 'y_1', 'z_1']] = scaler.fit_transform(train_data[['x_1', 'y_1', 'z_1']])\n\nprint(train_data[['x_1', 'y_1', 'z_1']].head())","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 5 - Standarisation des valeurs numeriques de validation_data","metadata":{}},{"cell_type":"code","source":"\nscaler = StandardScaler()\n\ncols_to_scale = [f'x_{i}' for i in range(1, 41)] + [f'y_{i}' for i in range(1, 41)] + [f'z_{i}' for i in range(1, 41)]\n\nvalidation_data[cols_to_scale] = scaler.fit_transform(validation_data[cols_to_scale])\n\nprint(validation_data[cols_to_scale].head())\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 6 - Convertir les dates en foramt numérique train_data","metadata":{}},{"cell_type":"code","source":"\ntrain_data['temporal_cutoff'] = pd.to_datetime(train_data['temporal_cutoff'])\n\ntrain_data['temporal_cutoff_timestamp'] = train_data['temporal_cutoff'].astype(int) / 10**9\n\ntrain_data\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 7 - Convertir les dates en foramt numérique validation_data","metadata":{}},{"cell_type":"code","source":"\nvalidation_data['temporal_cutoff'] = pd.to_datetime(validation_data['temporal_cutoff'])\n\nvalidation_data['temporal_cutoff_timestamp'] = validation_data['temporal_cutoff'].astype(int) / 10**9\n\nvalidation_data","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 8 - Encodage LabelEncoder des resname train_data","metadata":{}},{"cell_type":"code","source":"label_encoder = LabelEncoder()\n\ntrain_data['resname_encoded'] = label_encoder.fit_transform(train_data['resname'])\n\nprint(train_data[['resname', 'resname_encoded']].head())","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 9 - Encodage LabelEncoder des resname validation_data","metadata":{}},{"cell_type":"code","source":"label_encoder = LabelEncoder()\n\nvalidation_data['resname_encoded'] = label_encoder.fit_transform(validation_data['resname'])\n\nprint(validation_data[['resname', 'resname_encoded']].head())\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 10 - Extraction d'informations pertinentes train_data","metadata":{}},{"cell_type":"code","source":"\ntrain_data['sequence_id'] = train_data['all_sequences'].str.split('|').str[0]\ntrain_data['chain'] = train_data['all_sequences'].str.split('|').str[1]\ntrain_data['structure'] = train_data['all_sequences'].str.split('|').str[2]\ntrain_data['species'] = train_data['all_sequences'].str.split('|').str[3]\n\ntrain_data[['sequence_id', 'chain', 'structure', 'species']].head()\n\n\ntrain_data","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 11 - Encodage des variables catégorielles Train_data","metadata":{}},{"cell_type":"code","source":"encoder = LabelEncoder()\n\ntrain_data['chain_encoded'] = encoder.fit_transform(train_data['chain'])\ntrain_data['structure_encoded'] = encoder.fit_transform(train_data['structure'])\ntrain_data['species_encoded'] = encoder.fit_transform(train_data['species'])\n\ntrain_data[['chain', 'chain_encoded', 'structure', 'structure_encoded', 'species', 'species_encoded']].head()\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 12 - Extraction d'informations pertinentes validation_data","metadata":{}},{"cell_type":"code","source":"validation_data['sequence_id'] = validation_data['all_sequences'].str.split('|').str[0]\nvalidation_data['chain'] = validation_data['all_sequences'].str.split('|').str[1]\nvalidation_data['structure'] = validation_data['all_sequences'].str.split('|').str[2]\nvalidation_data['species'] = validation_data['all_sequences'].str.split('|').str[3]\n\nvalidation_data[['sequence_id', 'chain', 'structure', 'species']].head()\n\nvalidation_data","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### 3 - 13 - Encodage des variables catégorielles validataion_train","metadata":{}},{"cell_type":"code","source":"encoder = LabelEncoder()\n\nvalidation_data['chain_encoded'] = encoder.fit_transform(validation_data['chain'])\nvalidation_data['structure_encoded'] = encoder.fit_transform(validation_data['structure'])\nvalidation_data['species_encoded'] = encoder.fit_transform(validation_data['species'])\n\nvalidation_data[['chain', 'chain_encoded', 'structure', 'structure_encoded', 'species', 'species_encoded']].head()\n\nvalidation_data","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"\n#### 4 - 1 - One-Hot Encoding\n","metadata":{}},{"cell_type":"code","source":"# from tensorflow.keras.models import Sequential\n# from tensorflow.keras.layers import LSTM, Dense, Dropout\n# from tensorflow.keras.optimizers import Adam\n\n# # Définir le modèle LSTM\n# model = Sequential()\n# model.add(LSTM(128, input_shape=(train_encoded.shape[1], train_encoded.shape[2]), return_sequences=True))\n# model.add(Dropout(0.2))\n# model.add(LSTM(64))\n# model.add(Dense(3))\n\n# # Compilation du modèle\n# model.compile(optimizer=Adam(), loss='mean_squared_error')\n\n# # Entraînement du modèle\n# model.fit(train_encoded, train_labels, epochs=10, batch_size=32, validation_data=(validation_encoded, validation_labels))\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# import tensorflow as tf\n# from tensorflow.keras.layers import Input, Dense, LayerNormalization, MultiHeadAttention, Dropout\n\n# def transformer_encoder(input_tensor, head_size, num_heads, ff_dim, dropout=0.1):\n#     # Attention layer\n#     attention = MultiHeadAttention(num_heads=num_heads, key_dim=head_size)(input_tensor, input_tensor)\n#     attention = Dropout(dropout)(attention)\n#     attention = LayerNormalization(epsilon=1e-6)(attention + input_tensor)\n    \n#     # Feed forward layer\n#     ff = Dense(ff_dim, activation=\"relu\")(attention)\n#     ff = Dense(input_tensor.shape[-1])(ff)\n#     ff = Dropout(dropout)(ff)\n#     return LayerNormalization(epsilon=1e-6)(ff + attention)\n\n# input_seq = Input(shape=(train_encoded.shape[1], train_encoded.shape[2]))  # Shape des séquences encodées\n# x = transformer_encoder(input_seq, head_size=64, num_heads=4, ff_dim=128)\n# x = Dense(3)(x)  # Sortie des coordonnées 3D\n# model = tf.keras.Model(inputs=input_seq, outputs=x)\n\n# model.compile(optimizer=Adam(), loss='mean_squared_error')\n\n# # Entraînement du modèle\n# model.fit(train_encoded, train_labels, epochs=10, batch_size=32, validation_data=(validation_encoded, validation_labels))\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# from tensorflow.keras.models import Sequential\n# from tensorflow.keras.layers import Dense\n\n# # Modèle simple avec des couches denses\n# model = Sequential()\n# model.add(Dense(128, input_dim=train_encoded.shape[1], activation='relu'))\n# model.add(Dense(64, activation='relu'))\n# model.add(Dense(3))  # Prédiction des 3 coordonnées (x, y, z)\n\n# model.compile(optimizer=Adam(), loss='mean_squared_error')\n\n# # Entraînement du modèle\n# model.fit(train_encoded, train_labels, epochs=10, batch_size=32, validation_data=(validation_encoded, validation_labels))\n","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}