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.

Trabajando con un conjunto de archivos txt de una sola columna y observando la superposición mediante Pandas/python.

Tengo un montón de archivos de texto individuales de una sola columna (exactamente 55). Los nombres de los archivos son muy genéricos (archivo de texto (1).txt, archivo de texto (2).txt, etc.). Cada archivo es un archivo de texto plano que contiene el nombre del conjunto de genes en la primera línea, la descripción en la línea 2 y luego la lista real de genes (cada uno en una nueva línea sin otros caracteres).

Tengo todos estos archivos en una carpeta. Mi objetivo es crear de alguna manera un marco de datos que contenga una lista no redundante de todas las proteínas que se encuentran en los archivos de esta carpeta y luego tener una segunda columna que liste en qué vías (es decir, la línea 1 del archivo/archivos en los que se puede encontrar la proteína) se encuentra cada proteína. ¡Soy muy nueva en la programación y he estado intentando muchas cosas que simplemente no funcionan! Si alguien pudiera ayudar, sería muy apreciado 🙂

Ejemplo de uno de los archivos de texto.

DACH1_TARGET_GENES
> Genes containing one or more binding sites for UniProt:Q9UI36 (DACH1) in their promoter regions (TSS -1000,+100 bp) as identified by GTRD version 20.06 ChIP-seq harmonization.
AAGAB
AAR2
ABCA7
ABCB10
ABHD17C
ABHD2
ABR

La salida esperada sería algo como esto (esto simula un marco de datos de dos columnas):

Proteína   Conjuntos de datos
AAGAB      ['Cancer_TargetGenes', 'Immune_System_Genes']
AFAWH      ['Cancer_TargetGenes', 'Cardiac_System_Genes']
ADSJA      ['Cancer_TargetGenes', 'Skin_System_Genes']
SADIJ      ['GI_TargetGenes']
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Puedes utilizar las librerías os y pandas para lograr el resultado deseado. Aquí tienes una forma de hacerlo:

    import os
    import pandas as pd
    
    # crea un diccionario vacío para almacenar las proteínas y los datasets en los que se encuentran
    proteins = {}
    
    # recorre cada archivo en el directorio
    for filename in os.listdir('ruta/a/carpeta'):
        # lee el archivo en una lista de líneas
        with open(os.path.join('ruta/a/carpeta', filename)) as f:
            lines = f.readlines()
    
        # la primera línea es el nombre del conjunto de genes
        gene_set_name = lines[0].strip()
    
        # recorre las líneas restantes para obtener la lista de genes
        for gene in lines[2:]:
            # elimina los espacios en blanco y los caracteres de nueva línea
            gene = gene.strip()
            # verifica si el gen ya está en el diccionario
            if gene in proteins:
                # si está, agrega el nombre del conjunto de genes a la lista de datasets para ese gen
                proteins[gene].append(gene_set_name)
            else:
                # si no está, agrega el gen al diccionario con el nombre del conjunto de genes como el primer dataset
                proteins[gene] = [gene_set_name]
    
    # convierte el diccionario a un DataFrame y ordénalo por la columna de proteínas
    df = pd.DataFrame.from_dict(proteins, orient='index', columns=['Datasets']).sort_index()
    # reinicia el índice para que la columna de proteínas sea una columna regular
    df = df.reset_index()
    # renombra las columnas
    df.columns = ['Protein', 'Datasets']
    

    Este código utiliza un diccionario para almacenar las proteínas y los datasets en los que se encuentran. Para cada archivo en el directorio, este lee el archivo en una lista de líneas, extrae el nombre del conjunto de genes de la primera línea y recorre las líneas restantes para extraer cada gen. Para cada gen, verifica si el gen ya está en el diccionario y, si es así, agrega el nombre del conjunto de genes a la lista de datasets para ese gen. Si el gen no está en el diccionario, agrega el gen al diccionario con el nombre del conjunto de genes como el primer dataset. Finalmente, convierte el diccionario en un DataFrame, lo ordena por la columna de proteínas, reinicia el índice para que la columna de proteínas sea una columna regular y renombra las columnas.

    El DataFrame resultante debería tener la lista no redundante de todas las proteínas encontradas en los archivos de la carpeta, con una segunda columna que indique en qué vías se encuentra cada proteína.

Comments are closed.