Quanto è utile/interessante questa discussione:
Autore |
Discussione |
|
Martin.diagnostica
Utente Attivo
  

1582 Messaggi |
Inserito il - 23 novembre 2010 : 23:46:16
|
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
  

1582 Messaggi |
Inserito il - 25 novembre 2010 : 00:07:13
|
Problema troppo difficile, nessuno mi sa aiutare |
 |
|
chick80
Moderatore
    

Città: Edinburgh
11491 Messaggi |
Inserito il - 25 novembre 2010 : 08:59:02
|
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+!) |
 |
|
Martin.diagnostica
Utente Attivo
  

1582 Messaggi |
Inserito il - 26 novembre 2010 : 23:02:20
|
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 ;)
|
 |
|
chick80
Moderatore
    

Città: Edinburgh
11491 Messaggi |
Inserito il - 27 novembre 2010 : 08:55:31
|
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+!) |
 |
|
Martin.diagnostica
Utente Attivo
  

1582 Messaggi |
Inserito il - 28 novembre 2010 : 19:15:17
|
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=",")'
|
 |
|
chick80
Moderatore
    

Città: Edinburgh
11491 Messaggi |
Inserito il - 28 novembre 2010 : 19:48:08
|
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+!) |
 |
|
Martin.diagnostica
Utente Attivo
  

1582 Messaggi |
Inserito il - 28 novembre 2010 : 20:23:46
|
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" |
 |
|
Martin.diagnostica
Utente Attivo
  

1582 Messaggi |
Inserito il - 28 novembre 2010 : 20:27:28
|
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 |
 |
|
chick80
Moderatore
    

Città: Edinburgh
11491 Messaggi |
Inserito il - 28 novembre 2010 : 20:44:24
|
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+!) |
 |
|
chick80
Moderatore
    

Città: Edinburgh
11491 Messaggi |
Inserito il - 28 novembre 2010 : 20:50:30
|
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+!) |
 |
|
Martin.diagnostica
Utente Attivo
  

1582 Messaggi |
Inserito il - 28 novembre 2010 : 21:01:35
|
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 |
 |
|
chick80
Moderatore
    

Città: Edinburgh
11491 Messaggi |
|
|
Discussione |
|
|
|
Quanto è utile/interessante questa discussione:
MolecularLab.it |
© 2003-24 MolecularLab.it |
 |
|
|