| """ |
| Data Loader for CRISPR Datasets |
| Loads sequences from txt files and encodes them for CNN/BERT models |
| """ |
|
|
| import numpy as np |
| from sequence_encoder import encode_batch_for_cnn, encode_batch_for_bert |
|
|
|
|
| def load_dataset(file_path, max_samples=None): |
| """ |
| Load sgRNA-DNA pairs from dataset file. |
| |
| Args: |
| file_path (str): Path to dataset file (e.g., 'datasets/I1.txt') |
| max_samples (int): Maximum number of samples to load (None = all) |
| |
| Returns: |
| tuple: (sgrna_list, dna_list, labels) |
| """ |
| sgrna_list = [] |
| dna_list = [] |
| labels = [] |
| |
| |
| with open(file_path, 'r') as f: |
| for i, line in enumerate(f): |
| if max_samples and i >= max_samples: |
| break |
| |
| |
| line = line.strip() |
| if not line: |
| continue |
| |
| |
| parts = line.split(',') |
| if len(parts) >= 3: |
| sgrna = parts[0] |
| dna = parts[1] |
| label = float(parts[2]) |
| |
| sgrna_list.append(sgrna) |
| dna_list.append(dna) |
| labels.append(label) |
| |
| return sgrna_list, dna_list, np.array(labels) |
|
|
|
|
| def load_and_encode_for_cnn(file_path, max_samples=None): |
| """ |
| Load dataset and encode for CNN model. |
| All sequences encoded to fixed size (26, 7). |
| |
| Args: |
| file_path (str): Path to dataset file |
| max_samples (int): Maximum samples to load |
| |
| Returns: |
| tuple: (X_cnn, y) where X_cnn is shape (n_samples, 26, 7) |
| """ |
| |
| print(f"Loading dataset from {file_path}...") |
| sgrna_list, dna_list, labels = load_dataset(file_path, max_samples) |
| print(f" Loaded {len(sgrna_list)} sequences") |
| |
| |
| print(f"Encoding for CNN...") |
| X_cnn = encode_batch_for_cnn(sgrna_list, dna_list) |
| print(f" CNN encoded shape: {X_cnn.shape}") |
| |
| return X_cnn, labels |
|
|
|
|
| def load_and_encode_for_bert(file_path, max_samples=None): |
| """ |
| Load dataset and encode for BERT model. |
| All sequences encoded to fixed size (26,). |
| |
| Args: |
| file_path (str): Path to dataset file |
| max_samples (int): Maximum samples to load |
| |
| Returns: |
| tuple: (X_bert, y) where X_bert is shape (n_samples, 26) |
| """ |
| |
| print(f"Loading dataset from {file_path}...") |
| sgrna_list, dna_list, labels = load_dataset(file_path, max_samples) |
| print(f" Loaded {len(sgrna_list)} sequences") |
| |
| |
| print(f"Encoding for BERT...") |
| X_bert = encode_batch_for_bert(sgrna_list, dna_list) |
| print(f" BERT encoded shape: {X_bert.shape}") |
| |
| return X_bert, labels |
|
|