Forum

Nome Utente:
Password:
Riconoscimi automaticamente
 Tutti i Forum
 Laboratorio
 Bioinformatica e Biostatistica
 Referti per pazienti
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
I seguenti utenti stanno leggendo questo Forum Qui c'è:

Aggiungi Tag Aggiungi i tag

Quanto è utile/interessante questa discussione:

Autore Discussione  

Martin.diagnostica
Utente Attivo

H. pylori


1582 Messaggi

Inserito il - 23 novembre 2010 : 23:46:16  Mostra Profilo  Visita l'Homepage di Martin.diagnostica Invia a Martin.diagnostica un Messaggio Privato  Rispondi Quotando
Salve a tutti
Ho bisogno dell'aiuto di tutti i bioinformatici che bazzicano su questo forum. Un apparecchio di chimica clinica che uso mi salva un array delle analisi effettuate. Il file in formato cvs ha il seguente layout

ID, N richista, analita 1, analita 2, ... , analita n, analita n+1

Ora su ogni paziente(pz) non vengono testati tutti gli analiti, io avrei la necessita di generare dei report per pz dove per ovvi motivi di leggibilità non dovrebbero comparire le celle vuote.

ID
N richiesta
analita 1 valore (non nullo)

Questo report che poi dovrei spedire per mail causa collaborazione mi eviterebbe noiosi e ripetitivi lavori manuali.
io ho provato ad importare il tutto su base (openoffice) ma non ho avuto successo. Ho anche tentato di usare il linguaggio sql ma non è una cosa che si può improvvisare
Grazie in anticipo per ogni aiuto

Martin.diagnostica
Utente Attivo

H. pylori



1582 Messaggi

Inserito il - 25 novembre 2010 : 00:07:13  Mostra Profilo  Visita l'Homepage di Martin.diagnostica Invia a Martin.diagnostica un Messaggio Privato  Rispondi Quotando
Problema troppo difficile, nessuno mi sa aiutare
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 25 novembre 2010 : 08:59:02  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
A volte bisogna un po' attendere per una risposta... il problema alla fine non è così complesso.

Io lo farei con qualcosa tipo Python, Perl o magari R. SQL non è una brutta idea, ma devi avere i dati in un DB (che, ribadisco, sarebbe un'ottima idea).

Ho solo un piccolo problema a capire la tua domanda: hai più pazienti nello stesso file o solo una riga per ciascun CSV.

Puoi farci un esempio completo di un file di input e del file di output desiserato?


Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

Martin.diagnostica
Utente Attivo

H. pylori



1582 Messaggi

Inserito il - 26 novembre 2010 : 23:02:20  Mostra Profilo  Visita l'Homepage di Martin.diagnostica Invia a Martin.diagnostica un Messaggio Privato  Rispondi Quotando
Grazie della risposta
Allora il cvs è strutturato cosi

id, richiesta, data, glicemia, azotemia, creatinemia, ..., analita N, analita N+1
1, 1, 25.11.2010, 101, , 0.84, ....
2, 2, 25.11.2010, 98,

diciamo 40 di analiti

il referto dovrebbe essere molto semplice

id
glicemia
azotemia

NB solo gli esami effettuati (nascondi campi vuoti)

Io il cvs riesco ad importarlo in base (openofficce), non mi interessa dei valori di riferimento o altre cose
ragazzi se mi aiutate vi sarò debitore in terno ;)


Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 27 novembre 2010 : 08:55:31  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Ti scrivo due soluzioni, la prima in Python (che però non so usare molto bene, quindi potrebbe essere ottimizzabile) e la seconda in R (scaricabile gratuitamente da www.r-project.org ). Nota che R non è fatto stricto senso per queste cose ma è uno dei software che utilizzo di più quindi mi viene molto facile scrivertela!

Python:


import csv

# Chiediamo all'utente che linea vuole salvare
id = input("Inserire l'id dell'analisi desiderata: ")

# Leggiamo il file csv
reader = csv.reader(open('analiti.csv', 'r'), delimiter=',')

numLinea = 0
# Attraversiamo il file linea per linea
for line in reader:
	# Salviamo l'header.
	if numLinea == 0:
		header = line
	else:
		if int(line[0]) == id: # Abbiamo trovato l'id desiderato
			break 
	numLinea += 1

if numLinea != id:
	print "ID non trovato!"
	exit()
	
writer = csv.writer(open('output.csv', 'w'), delimiter=",")
ncol = 0
for col in line:
	if len(col) > 0:
		writer.writerow([header[ncol], col])
	ncol += 1


R:


# Leggiamo il csv
risultati <- read.table("analiti.csv", header=TRUE, sep=",")
numero.riga <- 5 # Il numero della riga che vogliamo leggere

# Prendiamo la riga desiderata
output <- risultati[numero.riga,]
# Eliminiamo le colonne vuote
output <- output[!is.na(output)]
# Scriviamo l'output
write.table(output, "output.csv", sep="\n")

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

Martin.diagnostica
Utente Attivo

H. pylori



1582 Messaggi

Inserito il - 28 novembre 2010 : 19:15:17  Mostra Profilo  Visita l'Homepage di Martin.diagnostica Invia a Martin.diagnostica un Messaggio Privato  Rispondi Quotando
Grazie troppo gentile conosco R anche se nono ho mai utilizzato.

Rinomino il mio file in analiti.csv Quando lancio il primo script dal mio linux-Mint ottengo il seguente errore

ivo@ivo-desktop:~$ ./referti.py
./referti.py: riga 4: errore di sintassi vicino il simbolo non atteso "("
./referti.py: riga 4: `id = input("Inserire l'id dell'analisi desiderata: ")'

Col secondo invece ottengo un un'altro errore simile

ivo@ivo-desktop:~$ ./referti.r
./referti.r: riga 2: errore di sintassi vicino il simbolo non atteso "("
./referti.r: riga 2: `risultati <- read.table("analiti.csv", header=TRUE, sep=",")'



Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 28 novembre 2010 : 19:48:08  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando

Per il file python o lo esegui con:


python referti.py


oppure devi aggiungere una riga in cima al file .py per specificare con che programma eseguire il file:


#/usr/bin/env python


===

Per R devi lanciare il programma (semplicemente con il comando
R
) e poi scrivere


source("referti.R")


Assicurati di lanciare R dalla directory dove stanno i tuoi files o alternativamente di cambiare la directory di lavoro usando:


setwd("path/della/directory/")


Puoi mettere il comando setwd anche nello script R volendo.

In alternativa puoi chiamare lo script direttamente da linea di comando con:


R CMD BATCH referti.R

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

Martin.diagnostica
Utente Attivo

H. pylori



1582 Messaggi

Inserito il - 28 novembre 2010 : 20:23:46  Mostra Profilo  Visita l'Homepage di Martin.diagnostica Invia a Martin.diagnostica un Messaggio Privato  Rispondi Quotando
Grazie immaginavo che ero io che commettevo qualche errore grossolano.
lo script in python è perfetto ecco l'output della riga 1

No. Richiesta ,1

ID Campione ,1

Richiesto il ,28/10/10

Richiesto alle,115:00

GLUOX,99

UREA,35

CREA,"0,78"

URIC,"5,5"

CHOL,225

TRIG,115

GPT,32

GOT,25

quello in R mi da un risalutato strano ecco l'output

"x"
"1"
"1"
"2"
"1"
"3"
"28/10/10"
"4"
"115:00"
"5"
"99"
"6"
"35"
"7"
"0,78"
"8"
"5,5"
"9"
"225"
"10"
"115"
"11"
"32"
"12"
"25"
Torna all'inizio della Pagina

Martin.diagnostica
Utente Attivo

H. pylori



1582 Messaggi

Inserito il - 28 novembre 2010 : 20:27:28  Mostra Profilo  Visita l'Homepage di Martin.diagnostica Invia a Martin.diagnostica un Messaggio Privato  Rispondi Quotando
Sarebbe bello se fosse possibile che lo script generasse automaticamente un report per ogni riga del file o cmq anche procedendo manualmente, se nominasse il file aggiungendo un numero progressivo, in modo da non sovrascrivere il referto precedente.
Cmq già per il lavoro fatto ti sono infinitamente debitore
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 28 novembre 2010 : 20:44:24  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Diciamo che il file R non l'avevo proprio testato a fondo...

Questa nuova versione dovrebbe dare lo stesso output dello script Python e chiede anche l'input dell'utente per il numero della riga :)


# Leggiamo il csv
risultati <- read.table("analiti.csv", header=TRUE, sep=",")

cat ("Inserire l'ID dell'analisi desiderata: ")
numero.riga <- scan(n=1, quiet=TRUE)

# Prendiamo la riga desiderata
line <- risultati[numero.riga,]
# Eliminiamo le colonne vuote
output <- line[!is.na(line)]
# Aggiungiamo i nomi delle colonne
output <- cbind(names(risultati)[!is.na(line)], output)
# Scriviamo l'output
write.table(output, "output.csv", sep=",", quote=FALSE, col.names=FALSE, row.names=FALSE)

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 28 novembre 2010 : 20:50:30  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Per fare tutte le righe basta mettere il tutto in un ciclo for.

In R fai:


# Leggiamo il csv
risultati <- read.table("analiti.csv", header=TRUE, sep=",")

for (numero.riga in 1:length(risultati)) 
	{
	# Prendiamo la riga desiderata
	line <- risultati[numero.riga,]
	# Eliminiamo le colonne vuote
	output <- line[!is.na(line)]
	# Aggiungiamo i nomi delle colonne
	output <- cbind(names(risultati)[!is.na(line)], output)
	# Scriviamo l'output
	write.table(output, paste("referto.", numero.riga, ".csv", sep=""), sep=",", quote=FALSE, col.names=FALSE, row.names=FALSE)
	}

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

Martin.diagnostica
Utente Attivo

H. pylori



1582 Messaggi

Inserito il - 28 novembre 2010 : 21:01:35  Mostra Profilo  Visita l'Homepage di Martin.diagnostica Invia a Martin.diagnostica un Messaggio Privato  Rispondi Quotando
Lo script in R adesso va benissimo sotto ho postato l'output ;-). Ma è troppo complicato far leggere automaticamente tutte le righe allo script e far generare un file report per ogni riga (1 riga in effetti corrisponde ad un id)? Oppure anche manualmente ma non sovrascrivendo di volta in volta il file output?
Grazie comunque mi ha veramente aiutato molto

1,No..Richiesta,1
2,ID.Campione,1
3,Richiesto.il,28/10/10
4,Richiesto.alle,115:00
5,GLUOX,99
6,UREA,35
7,CREA,0,78
8,URIC,5,5
9,CHOL,225
10,TRIG,115
11,GPT,32
12,GOT,25
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 28 novembre 2010 : 21:58:17  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Probabilmente non hai visto la mia ultima risposta! :)

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina
  Discussione  

Quanto è utile/interessante questa discussione:

 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
Vai a:
MolecularLab.it © 2003-18 MolecularLab.it Torna all'inizio della Pagina