Pagina 1 di 1

[RISOLTO] Correlazione pearson in bash o python

Inviato: sabato 7 maggio 2016, 14:29
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?

Re: Correlazione pearson in bash o python

Inviato: sabato 7 maggio 2016, 18:11
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

Re: Correlazione pearson in bash o python

Inviato: lunedì 9 maggio 2016, 13:19
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()