[RISOLTO] Correlazione pearson in bash o python

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
cloudany
Prode Principiante
Messaggi: 121
Iscrizione: domenica 28 febbraio 2010, 12:54
Desktop: Unity
Distribuzione: Ubuntu

[RISOLTO] Correlazione pearson in bash o python

Messaggio da cloudany »

Ciao ragazzi vi scrivo per un problema da risolvere, allora ho circa 700 file ognuno di essi strutturato in tal modo:

Codice: Seleziona tutto

6	6	248.667	643
7	30	412	794
8	11	421	831
9	6	423	840
10	3	424	845
11	1	424.5	848
12	849	849	849
13	848	848	848
14	847	847	847
15	846	846	846
16	845	845	845
17	844	844	844
18	843	843	843
19	842	842	842
20	841	841	841
21	840	840	840
22	839	839	839
23	838	838	838
24	837	837	837
I valori sono spaziati con TAB e:
-La prima colonna è la molteplicità K (che serve solo come indice per capire la lunghezza del gene)
-La seconda colonna è il alore minimo calcolato da una elaborazione fatta prima
-Il terzo è il valor medio calcolato come il minimo (se da fastidio il .x posso eliminarlo)
-La quarta è il massimo calcollato come i due precedenti.
Quindi 700 file strutturati in tal modo, ogni file è un organismo, ciò che devo fare è calcolare la correlazione di Pearson
Immagine.
Dovrei ciclare sui 700 files e fare un "vs" di ognuno di essi:
-1 vs 2
-1 vs 3
.....
-1 vs 700
-2 vs 3 etc...
Inserendo il risultato in un nuovo MEGA .csv come risultato strutturato come il file che vi ho fatto vedere.
Praticamente dovrei usare tutti i valori di MIN di organismo_1 e i MIN di organismo_2 e trarne la correlazione, poi il AVG e infine il max iterando per ogni organismo.

Qualsuno di voi conosce se AWK lo si può usare come un cercatore di valori nel CSV, ovvero trattando il CSV come un array n-dimensionale dove [5,2] = riga 5 colonna 2?
Posso usare anche python per questo, riuscireste ad aiutarmi?
Ultima modifica di cloudany il martedì 10 maggio 2016, 10:15, modificato 1 volta in totale.
" 4 letters are enough to explain mankind"
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Correlazione pearson in bash o python

Messaggio da crap0101 »

secondo me fai prima e meglio usando python e, in particolare, numpy/scipy... sia per caricare i dati da confrontare che per generare le combinazioni file vs file
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
cloudany
Prode Principiante
Messaggi: 121
Iscrizione: domenica 28 febbraio 2010, 12:54
Desktop: Unity
Distribuzione: Ubuntu

Re: Correlazione pearson in bash o python

Messaggio da cloudany »

RISOLTO:
Per chi volesse spulciare il codice:

Codice: Seleziona tutto

#! /usr/bin/python
import csv
import numpy

numpy.seterr(divide='ignore', invalid='ignore')

viruses = csv.reader(open('virus_name.csv', 'rb'))
name = []

viruses_next = csv.reader(open('virus_name_next.csv', 'rb'))
name_next = []

min_list = []
avg_list = []
max_list = []

for row in viruses:
        name.append(row[0])

for row_next in viruses_next:
        name_next.append(row_next[0])

ofile  = open('/home/daniele/Desktop/heatmap.csv', "wb")

for n in name:
    data_1 = csv.reader(open(n+'_min_avg_max.csv', 'rb'), delimiter="\t")
    column1_data_1, column2_data_1, column3_data_1 = [], [], []

    for row in data_1:
        column1_data_1.append(row[1])
        column2_data_1.append(row[2])
        column3_data_1.append(row[3])

    column_min_data_1 = map(float, column1_data_1)
    column_avg_data_1 = map(float, column2_data_1)
    column_max_data_1 = map(float, column3_data_1)

    for j in name_next:
        data_2 = csv.reader(open(j+'_min_avg_max.csv', 'rb'), delimiter="\t")
        column1_data_2, column2_data_2, column3_data_2 = [], [], []

        for row_next in data_2:
            column1_data_2.append(row_next[1])
            column2_data_2.append(row_next[2])
            column3_data_2.append(row_next[3])

            column_min_data_2 = map(float, column1_data_2)
            column_avg_data_2 = map(float, column2_data_2)
            column_max_data_2 = map(float, column3_data_2)

        print n + ' vs ' + j
        min_heat = numpy.asarray(numpy.corrcoef(column_min_data_1, column_min_data_2))[0, 1]
        avg_heat = numpy.asarray(numpy.corrcoef(column_avg_data_1, column_avg_data_2))[0, 1]
        max_heat = numpy.asarray(numpy.corrcoef(column_max_data_1, column_max_data_2))[0, 1]

        writer = csv.writer(ofile, delimiter='\t')
        writer.writerow([n+' vs '+j, min_heat, avg_heat, max_heat])

ofile.close()

" 4 letters are enough to explain mankind"
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti