es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Transformar una matriz binaria en la matriz original.

Soy principiante en Python y no tengo idea de cómo resolver este problema:

Tengo secuencias de ADN de 60 nucleótidos guardadas en formato CSV, donde cada nucleótido está representado por 3 variables indicadoras binarias de la siguiente manera:

A -> 1 0 0
C -> 0 1 0
G -> 0 0 1
T -> 0 0 0

Entonces, tengo una matriz de 60*3 columnas y ~3000 filas.

Me gustaría obtener las secuencias de ADN originales. ¿Cómo puedo hacer esto?

Intenté el siguiente código pero se bloqueó:

mm_output = pd.DataFrame(columns=[‘colname_’ + str(i) for i in range(60)], index=range(X.shape[0]))
for i in range(X.shape[0]):
for j in np.arange(0, 180, 3):
X_sub=X.iloc[i,j:j+3]
j_tmp=int(j/3)
if np.array_equal(X_sub.values,A):
mm_output.iloc[i,j_tmp]=’A’
elif np.array_equal(X_sub.values,C):
mm_output.iloc[i,j_tmp]=’C’
elif np.array_equal(X_sub.values,G):
mm_output.iloc[i,j_tmp]=’G’
elif np.array_equal(X_sub.values,T):
mm_output.iloc[i,j_tmp]=’T’

Los datos fueron recopilados aquí: https://www.openml.org/d/40670

Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para volver atrás y obtener las secuencias de ADN originales a partir de la matriz de indicadores binarios, puedes usar el siguiente código:

    import pandas as pd
    
    # Cargar el conjunto de datos
    df = pd.read_csv('https://www.openml.org/data/get_csv/3629/dataset_187_60.csv')
    
    # Definir una correspondencia entre los indicadores binarios y los nucleótidos
    mapping = {'100': 'A', '010': 'C', '001': 'G', '000': 'T'}
    
    # Recorrer cada fila de la matriz
    for i in range(df.shape[0]):
        row = df.iloc[i, :]
    
        # Convertir cada conjunto de tres indicadores binarios a su correspondiente nucleótido
        nucleotides = [mapping[''.join(row[j:j+3])] for j in range(0, 180, 3)]
    
        # Combinar los nucleótidos en una única secuencia de ADN
        dna_seq = ''.join(nucleotides)
    
        # Imprimir la secuencia de ADN
        print(dna_seq)
    

    Este código carga el conjunto de datos en un DataFrame de pandas y define una correspondencia entre los indicadores binarios y los nucleótidos. Luego, recorre cada fila del DataFrame, convierte cada conjunto de tres indicadores binarios a su correspondiente nucleótido utilizando la correspondencia, y combina los nucleótidos en una única secuencia de ADN. Las secuencias de ADN resultantes se imprimen en la consola.

    Ten en cuenta que este código asume que el DataFrame de entrada tiene 60*3 columnas y que los indicadores binarios se almacenan como cadenas de longitud 3. Si tu DataFrame tiene una forma diferente o los indicadores binarios se almacenan de manera diferente, es posible que debas modificar el código en consecuencia.

Comments are closed.