Python - Duda para un programa en Python

   
Vista:

Duda para un programa en Python

Publicado por pedro (8 intervenciones) el 20/06/2014 20:38:07
Hola!

Tengo que hacer un programa en Python y estoy atascado en un punto. Se trata de separar los elementos de la segunda de una serie de columnas y asociar cada elemento a los elementos de la primera columna. Tal que así:

ID DB -------------------------- ID DB
1 A, B, C -----------------------> 1 A
2 B, D, G, H -----------------> 1 B
3 N, S -----------------------> 1 C
. ----------------------- 2 B
. ----------------------- 2 D
. . .
Los ID's son genes y DB son enfermedades asociadas. Estoy en este punto:


1
2
3
4
5
6
7
8
9
10
fichero = open('disease.txt', 'r' )
 
for linea in fichero:
 lineadividida=linea.split("\t")
 acnumber = lineadividida[0]
 enfermedades = lineadividida[2]
 
 print acnumber + "---" +  enfermedades
 
fichero.close()


En el archivo "disease.txt" es donde tengo la tabla de los identificadores (genes) con sus respectivas enfermedades. Estoy bloqueado a partir de este punto. Muy agradecido de antemano cualquier sugerencia o solución!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Duda para un programa en Python

Publicado por xve (1235 intervenciones) el 21/06/2014 11:52:05
Hola Pedro, nos puedes adjuntar el archivo desease.txt, ya que copiado tal cual, no hay tabulaciones...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda para un programa en Python

Publicado por pedro (8 intervenciones) el 21/06/2014 15:18:48
Este sería el archivo. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Duda para un programa en Python

Publicado por xve (1235 intervenciones) el 21/06/2014 18:28:51
Hola Pedro, he visto el archivo, pero no me queda claro como hay que separarlo... por ejemplo, de esta linea:
1
P00973	2',5'-oligoadenylate synthetase 1, 40/46kDa	diabetes, type 1,hepatitis B,hepatitis C,multiple sclerosis,severe acute respiratory syndrome,type 1 diabetes,

Que valores necesitas coger?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda para un programa en Python

Publicado por pedro (8 intervenciones) el 22/06/2014 02:36:15
Hola se nuevo! Sería algo asi:

P00973 diabetes tipo 1
P00973 hepatitis B
P00973 hepatitis C
........

Así con todos los identificadores, de forma que que quedara ( identificador - enfermedad). Solo consigo llegar a las dos columnas pero no puedo separar las enfermedades por las comas y luego asociarlas a su identificador.
Muchas gracias por todo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Duda para un programa en Python

Publicado por xve (1235 intervenciones) el 22/06/2014 20:27:30
Hola Pedro, ahora te he entendido...

Mira, este código:
1
2
3
4
5
6
7
8
9
fichero = open('disease.txt', 'r' )
 
for linea in fichero:
	lineadividida=linea.split("\t")
	for i in lineadividida[2].split(","):
		if i.strip():
			print lineadividida[0], i.strip()
 
fichero.close()

Para esta linea:
1
P00973	2',5'-oligoadenylate synthetase 1, 40/46kDa	diabetes, type 1,hepatitis B,hepatitis C,multiple sclerosis,severe acute respiratory syndrome,type 1 diabetes,
Devuelve:
1
2
3
4
5
6
7
P00973 diabetes
P00973 type 1
P00973 hepatitis B
P00973 hepatitis C
P00973 multiple sclerosis
P00973 severe acute respiratory syndrome
P00973 type 1 diabetes

Tendrás que hacer algunos condicionales para cuando encuentre type 1 y algún que otro valor que no tenga que separarse.

Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda para un programa en Python

Publicado por pedro (8 intervenciones) el 23/06/2014 01:23:58
Hola! Genial, muchas gracias por la ayuda, de verdad! Me funciona correctamente. Descubrí esta web el viernes y a partir de ahora la frecuentaré y aportaré conforme vaya aprendiendo.
Gracias de nuevo, hasta pronto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda para un programa en Python

Publicado por pedro (8 intervenciones) el 23/06/2014 15:47:55
Hola de nuevo! Creía que era suficiente el script que tengo arriba para el archivo "disease.txt", pero me he dado cuenta que para hacer otro paso en mi trabajo tengo que separar tambien algunos identificadores de genes ( en la primera columna) que viene separado por comas. Al obtener la lista nueva una vez aplico el programa, la guardo y aplico el programa de nuevo con el índice de "lineadividida" igual a cero para la columna de identificadores ( creia que era una posibilidad), pero no me sale.
¿Tendría que añador algun "if" ?
Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Duda para un programa en Python

Publicado por xve (1235 intervenciones) el 23/06/2014 17:51:04
Hola Pedro, no entiendo muy bien que quieres decir...

Nos lo puedes mostrar con un ejemplo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda para un programa en Python

Publicado por pedro (8 intervenciones) el 23/06/2014 19:06:58
Si, disculpad:
Se trata que al igual que hemos separado las enfermedades por cada identificador,
P00973 diabetes
P00973 type 1
P00973 hepatitis B
P00973 hepatitis C
P00973 multiple sclerosis
P00973 severe acute respiratory syndrome
P00973 type 1 diabetes

Ocurre que también necesito separar algunos identificadores, por ejemplo:

P10242, Q708E3, Q708E6 atherosclerosis

para la misma enfermedad. Están repartidos por el largo listado "disease.txt"

Creí poder hacerlo con el mismo script, cambiando el índice de "lineadividida", pero no sale.

Ademas de quedar:

P00973 diabetes
P00973 type 1
P00973 hepatitis B
P00973 hepatitis C
P00973 multiple sclerosis
P00973 severe acute respiratory syndrome
P00973 type 1 diabetes

debe de quedar:

P10242 atherosclerosis
Q708E3 atherosclerosis
Q708E6 atherosclerosis


Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Duda para un programa en Python

Publicado por xve (1235 intervenciones) el 24/06/2014 21:12:08
Hola Pedro, creo que seria algo así:
1
2
3
4
5
6
7
8
9
10
fichero = open('disease.txt', 'r' )
 
for linea in fichero:
	lineadividida=linea.split("\t")
	for i in lineadividida[2].split(","):
		for j in lineadividida[0].split(","):
			if i.strip():
				print j.strip(), i.strip()
 
fichero.close()

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda para un programa en Python

Publicado por pedro (8 intervenciones) el 25/06/2014 20:37:00
Hola, que tal?
Disculpen la tardanza en contestar, tenía que comprobar el programa y no he tenido tiempo hasta esta tarde. Lo primero, agradecer de veras esta labor tan altruísta, escasa en estos tiempos. El programa va fenomenal, pero aún no me termina de servir porque quedan emparejados algunas comillas tal que así: (ej: P10242 " ) o incluso algunas enfermedades no se separan debido a que están con " ; " .
Creo nuevas variables, ademas de i y de j, pero no deja de darme error, probablemente porque no se encajarlas dentro del script. La cosa es que debe quedar exclusivamente "un identificador - una enfermedad" para después aplicarle un algoritmo, de ahí a que deba quedar perfectamente emparejado ambas columnas.
Seguiré intentando eliminar de la lista resultante las "impurezas" tales como:

Q9ULC8 "schizophrenia
Q9ULC8 schizophrenia; bipolar disorder
Q9ULC8 "

Otro ejemplo a evitar:


A4UGR9 multiple sclerosis
Q86Y38 "diabetes
Q86Y38 type 1; blood pressure
Q86Y38 arterial; nephropathy in other diseases
Q86Y38 Diabetic Nephropathy
Q86Y38 nephropathy
Q86Y38 diabetic
Q86Y38 "
Q9H1B5 "diabetes
Q9H1B5 type 1; blood pressure
Q9H1B5 arterial; nephropathy in other diseases
Q9H1B5 Diabetic Nephropathy
Q9H1B5 "
Q05516 leukemia
Q15911 prostate cancer
Q9UQR1 psoriasis
Q6PJ98 psoriasis
O43829 myopia
O95125 "cholesterol

Las "comillas" y los " ; " deben desaparecer. Las enfermedades unidas por " ; " tambien deben de estar separadas.

Sigo intentándolo, sino pido consejo. Todo sea por la investigación en Biomedicina! : - )
Muchas gracias por todo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda para un programa en Python

Publicado por pedro (8 intervenciones) el 28/06/2014 18:19:22
Hola de nuevo:

Se me está atascando el trabajo de cambiar el archivo "disease.txt". Pruebo con nuevas variables aparte de i y de j , pero no me sale. Incluso antes de ejecutar el programa de arriba, intento con excel reemplazar " ; " por comas, pero no se que pasa que al ejecutar, me siguen saliendo " ; " en algunas lineas, a pesar de comprobar que he eliminado todos los puntos y comas con diversos editores de texto.
Agradecería alguna modificación en el último script, muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar