about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/correlation_matrix/show_corr_matrix.py210
-rw-r--r--wqflask/wqflask/templates/correlation_matrix.html4
2 files changed, 105 insertions, 109 deletions
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index a394f548..0269ce68 100644
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -55,11 +55,7 @@ class CorrelationMatrix(object):
         self.do_PCA = True
         this_group = self.trait_list[0][1].group.name #ZS: Getting initial group name before verifying all traits are in the same group in the following loop
         for trait_db in self.trait_list:
-            if trait_db[1].group.name != this_group:
-                self.insufficient_shared_samples = True
-                break
-            else:
-                this_group = trait_db[1].group.name
+            this_group = trait_db[1].group.name
             this_trait = trait_db[0]
             self.traits.append(this_trait)
             this_sample_data = this_trait.data
@@ -68,119 +64,115 @@ class CorrelationMatrix(object):
                 if sample not in self.all_sample_list:
                     self.all_sample_list.append(sample)
 
-        if self.insufficient_shared_samples:
-            pass
-        else:
-            self.sample_data = []
-            for trait_db in self.trait_list:
-                this_trait = trait_db[0]
-                this_sample_data = this_trait.data
+        self.sample_data = []
+        for trait_db in self.trait_list:
+            this_trait = trait_db[0]
+            this_sample_data = this_trait.data
 
-                this_trait_vals = []
-                for sample in self.all_sample_list:
-                    if sample in this_sample_data:
-                        this_trait_vals.append(this_sample_data[sample].value)
-                    else:
-                        this_trait_vals.append('')
-                self.sample_data.append(this_trait_vals)
-
-            if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples
-                self.do_PCA = False
-
-            self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
-
-            self.corr_results = []
-            self.pca_corr_results = []
-            self.shared_samples_list = self.all_sample_list
-            for trait_db in self.trait_list:
-                this_trait = trait_db[0]
-                this_db = trait_db[1]
-
-                this_db_samples = this_db.group.all_samples_ordered()
-                this_sample_data = this_trait.data
-
-                corr_result_row = []
-                pca_corr_result_row = []
-                is_spearman = False #ZS: To determine if it's above or below the diagonal
-                for target in self.trait_list:
-                    target_trait = target[0]
-                    target_db = target[1]
-                    target_samples = target_db.group.all_samples_ordered()
-                    target_sample_data = target_trait.data
-
-                    this_trait_vals = []
-                    target_vals = []
-                    for index, sample in enumerate(target_samples):
-                        if (sample in this_sample_data) and (sample in target_sample_data):
-                            sample_value = this_sample_data[sample].value
-                            target_sample_value = target_sample_data[sample].value
-                            this_trait_vals.append(sample_value)
-                            target_vals.append(target_sample_value)
-                        else:
-                            if sample in self.shared_samples_list:
-                                self.shared_samples_list.remove(sample)
-
-                    this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
-
-                    if num_overlap < self.lowest_overlap:
-                        self.lowest_overlap = num_overlap
-                    if num_overlap < 2:
-                        corr_result_row.append([target_trait, 0, num_overlap])
-                        pca_corr_result_row.append(0)
-                    else:
-                        pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
-                        if is_spearman == False:
-                            sample_r, sample_p = pearson_r, pearson_p
-                            if sample_r == 1:
-                                is_spearman = True
-                        else:
-                            sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
-
-                        corr_result_row.append([target_trait, sample_r, num_overlap])
-                        pca_corr_result_row.append(pearson_r)
-
-                self.corr_results.append(corr_result_row)
-                self.pca_corr_results.append(pca_corr_result_row)
-
-            self.trait_data_array = []
-            for trait_db in self.trait_list:
-                this_trait = trait_db[0]
-                this_db = trait_db[1]
-                this_db_samples = this_db.group.all_samples_ordered()
-                this_sample_data = this_trait.data
+            this_trait_vals = []
+            for sample in self.all_sample_list:
+                if sample in this_sample_data:
+                    this_trait_vals.append(this_sample_data[sample].value)
+                else:
+                    this_trait_vals.append('')
+            self.sample_data.append(this_trait_vals)
+
+        if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples
+            self.do_PCA = False
+
+        self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
+
+        self.corr_results = []
+        self.pca_corr_results = []
+        self.shared_samples_list = self.all_sample_list
+        for trait_db in self.trait_list:
+            this_trait = trait_db[0]
+            this_db = trait_db[1]
+
+            this_db_samples = this_db.group.all_samples_ordered()
+            this_sample_data = this_trait.data
+
+            corr_result_row = []
+            pca_corr_result_row = []
+            is_spearman = False #ZS: To determine if it's above or below the diagonal
+            for target in self.trait_list:
+                target_trait = target[0]
+                target_db = target[1]
+                target_samples = target_db.group.all_samples_ordered()
+                target_sample_data = target_trait.data
 
                 this_trait_vals = []
-                for index, sample in enumerate(this_db_samples):
-                    if (sample in this_sample_data) and (sample in self.shared_samples_list):
+                target_vals = []
+                for index, sample in enumerate(target_samples):
+                    if (sample in this_sample_data) and (sample in target_sample_data):
                         sample_value = this_sample_data[sample].value
+                        target_sample_value = target_sample_data[sample].value
                         this_trait_vals.append(sample_value)
-                self.trait_data_array.append(this_trait_vals)
+                        target_vals.append(target_sample_value)
+                    else:
+                        if sample in self.shared_samples_list:
+                            self.shared_samples_list.remove(sample)
 
-            corr_result_eigen = np.linalg.eig(np.array(self.pca_corr_results))
-            corr_eigen_value, corr_eigen_vectors = sortEigenVectors(corr_result_eigen)
+                this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
 
-            groups = []
-            for sample in self.all_sample_list:
-                groups.append(1)
-
-            try:
-                if self.do_PCA == True:
-                    self.pca_works = "True"
-                    self.pca_trait_ids = []
-                    pca = self.calculate_pca(list(range(len(self.traits))), corr_eigen_value, corr_eigen_vectors)
-                    self.loadings_array = self.process_loadings()
+                if num_overlap < self.lowest_overlap:
+                    self.lowest_overlap = num_overlap
+                if num_overlap < 2:
+                    corr_result_row.append([target_trait, 0, num_overlap])
+                    pca_corr_result_row.append(0)
                 else:
-                    self.pca_works = "False"
-            except:
-                self.pca_works = "False"
+                    pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
+                    if is_spearman == False:
+                        sample_r, sample_p = pearson_r, pearson_p
+                        if sample_r == 1:
+                            is_spearman = True
+                    else:
+                        sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
+
+                    corr_result_row.append([target_trait, sample_r, num_overlap])
+                    pca_corr_result_row.append(pearson_r)
 
-            self.js_data = dict(traits = [trait.name for trait in self.traits],
-                                groups = groups,
-                                cols = list(range(len(self.traits))),
-                                rows = list(range(len(self.traits))),
-                                samples = self.all_sample_list,
-                                sample_data = self.sample_data,)
-            #                    corr_results = [result[1] for result in result_row for result_row in self.corr_results])
+            self.corr_results.append(corr_result_row)
+            self.pca_corr_results.append(pca_corr_result_row)
+
+        self.trait_data_array = []
+        for trait_db in self.trait_list:
+            this_trait = trait_db[0]
+            this_db = trait_db[1]
+            this_db_samples = this_db.group.all_samples_ordered()
+            this_sample_data = this_trait.data
+
+            this_trait_vals = []
+            for index, sample in enumerate(this_db_samples):
+                if (sample in this_sample_data) and (sample in self.shared_samples_list):
+                    sample_value = this_sample_data[sample].value
+                    this_trait_vals.append(sample_value)
+            self.trait_data_array.append(this_trait_vals)
+
+        corr_result_eigen = np.linalg.eig(np.array(self.pca_corr_results))
+        corr_eigen_value, corr_eigen_vectors = sortEigenVectors(corr_result_eigen)
+
+        groups = []
+        for sample in self.all_sample_list:
+            groups.append(1)
+
+        try:
+            if self.do_PCA == True:
+                self.pca_works = "True"
+                self.pca_trait_ids = []
+                pca = self.calculate_pca(list(range(len(self.traits))), corr_eigen_value, corr_eigen_vectors)
+                self.loadings_array = self.process_loadings()
+            else:
+                self.pca_works = "False"
+        except:
+            self.pca_works = "False"
+
+        self.js_data = dict(traits = [trait.name for trait in self.traits],
+                            groups = groups,
+                            cols = list(range(len(self.traits))),
+                            rows = list(range(len(self.traits))),
+                            samples = self.all_sample_list,
+                            sample_data = self.sample_data,)
 
     def calculate_pca(self, cols, corr_eigen_value, corr_eigen_vectors):
         base = importr('base')
diff --git a/wqflask/wqflask/templates/correlation_matrix.html b/wqflask/wqflask/templates/correlation_matrix.html
index d556f31a..4e150618 100644
--- a/wqflask/wqflask/templates/correlation_matrix.html
+++ b/wqflask/wqflask/templates/correlation_matrix.html
@@ -51,8 +51,12 @@
       {% if result[0].name == trait.name and result[0].dataset == trait.dataset %}
       <td nowrap="ON" align="center" bgcolor="#cccccc" style="padding: 3px; line-height: 1.1;"><a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><em>n</em><br>{{ result[2] }}</font></a></td>
       {% else %}
+      {% if result[1] == 0 %}
+      <td nowrap="ON" align="middle" bgcolor="#eeeeee" style="padding: 3px; line-height: 1.1;">N/A</td>
+      {% else %}
       <td nowrap="ON" align="middle" class="corr_cell" style="padding: 3px; line-height: 1.1;"><a href="/corr_scatter_plot?dataset_1={% if trait.dataset.name == 'Temp' %}Temp_{{ trait.dataset.group.name }}{% else %}{{ trait.dataset.name }}{% endif %}&dataset_2={% if result[0].dataset.name == 'Temp' %}Temp_{{ result[0].dataset.group.name }}{% else %}{{ result[0].dataset.name }}{% endif %}&trait_1={{ trait.name }}&trait_2={{ result[0].name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><span class="corr_value">{{ '%0.2f' % result[1] }}</span><br>{{ result[2] }}</font></a></td>
       {% endif %}
+      {% endif %}
       {% endfor %}
     </tr>
     {% endfor %}