Preprocessing — Carga y limpieza de datos¶
Que hace este modulo¶
preprocessing.py es la Etapa 0 del pipeline: transforma un fichero
de expresion genica bruta (CSV, TSV, Excel o Parquet) en una matriz limpia
y normalizada lista para CPCA o bien el filtrado de genes semilla.
El flujo completo es:
Fichero en disco
|
v
load_expression_matrix() <- carga y detecta formato
|
v
Preprocessor.run() <- 4 pasos de limpieza
| Paso 1: eliminar genes sin nombre
| Paso 2: eliminar genes sparse (>30% ceros o NaN)
| Paso 3: resolver duplicados (conservar mayor MAD)
| Paso 4: normalizar cada gen a [-1, 1]
|
v
PreprocessingResult <- resultado empaquetado
Ejemplo de uso¶
from circust.preprocessing import load_expression_matrix, Preprocessor
# 1. Cargar la matriz desde un CSV
raw = load_expression_matrix("data/raw/BA11_astrocytes.csv")
print(raw.shape) # (56200, 479)
# 2. Preprocesar
prep = Preprocessor(sparse_threshold=0.3, verbose=True)
result = prep.run(raw)
# 3. Usar el resultado
print(result.expr_norm.shape) # genes filtrados x muestras
print(result.summary()) # resumen legible
print(result.dropped_sparse[:5]) # primeros genes eliminados
Los 4 pasos en detalle¶
Paso 1: Genes sin nombre¶
Elimina filas cuyo simbolo genico falta, esta vacio, lleno de espacios o es "nan".
Ocurre cuando un CSV tiene filas sin rowname o con celdas vacías.
Paso 2: Genes sparse¶
Un gen se elimina si mas del 30% de sus muestras son cero o NaN.
El umbral se controla con sparse_threshold o bien con nan_threshold y zero_threshold.
Note
La comparacion es estricta (>): un gen con exactamente 30% de ceros
se conserva.
Paso 3: Duplicados¶
Si un gen aparece mas de una vez (frecuente en microarrays), se conserva la fila con mayor MAD (Median Absolute Deviation) y se descarta el resto.
Paso 4: Normalizacion¶
Cada gen se escala independientemente al rango [-1, 1] con min-max:
Genes constantes (min == max) se mapean a 0.