Skip to content
Snippets Groups Projects
Commit 43c4ea65 authored by Hervé  MENAGER's avatar Hervé MENAGER
Browse files

save and display the PCA correlation circle

Former-commit-id: 42b2da5f48c598d4075607c9a59ae18ff65df1be
parent f2b104f6
No related branches found
No related tags found
No related merge requests found
import glob import glob
import json import json
import io
import base64
from django.core.management import BaseCommand, CommandError from django.core.management import BaseCommand, CommandError
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
...@@ -51,6 +53,7 @@ class Command(BaseCommand): ...@@ -51,6 +53,7 @@ class Command(BaseCommand):
x = StandardScaler().fit_transform(x) x = StandardScaler().fit_transform(x)
pca = PCA(n_components=2) pca = PCA(n_components=2)
principal_components = pca.fit_transform(x) principal_components = pca.fit_transform(x)
# compute correlation circle
variance_ratio = pd.Series(pca.explained_variance_ratio_) variance_ratio = pd.Series(pca.explained_variance_ratio_)
coef = np.transpose(pca.components_) coef = np.transpose(pca.components_)
cols = ['PC-'+str(x) for x in range(len(variance_ratio))] cols = ['PC-'+str(x) for x in range(len(variance_ratio))]
...@@ -69,13 +72,17 @@ class Command(BaseCommand): ...@@ -69,13 +72,17 @@ class Command(BaseCommand):
plt.ylabel("PC-1 (%s%%)" % str(variance_ratio[1])[:4].lstrip("0.")) plt.ylabel("PC-1 (%s%%)" % str(variance_ratio[1])[:4].lstrip("0."))
plt.xlim((-1,1)) plt.xlim((-1,1))
plt.ylim((-1,1)) plt.ylim((-1,1))
plt.title("Circle of Correlations") my_string_io_bytes = io.BytesIO()
plt.savefig('foo2.png') plt.savefig(my_string_io_bytes, format='png')
my_string_io_bytes.seek(0)
# figdata_png is the correlation circle figure, base 64-encoded
figdata_png = base64.b64encode(my_string_io_bytes.read())
principal_df = pd.DataFrame(data = principal_components , columns = ['x', 'y']) principal_df = pd.DataFrame(data = principal_components , columns = ['x', 'y'])
final_df = pd.concat([principal_df, df[['family','id']]], axis = 1) final_df = pd.concat([principal_df, df[['family','id']]], axis = 1)
for index, row in final_df.iterrows(): for index, row in final_df.iterrows():
pca_data.append({'x': row.x, 'y': row.y, 'id': row.id, 'family_name': row.family}) pca_data.append({'x': row.x, 'y': row.y, 'id': row.id, 'family_name': row.family})
pca_json = json.dumps(pca_data, separators=(',',':')) pca_data_cc = {'data': pca_data, 'correlation_circle': figdata_png.decode("utf-8")}
pca_json = json.dumps(pca_data_cc, separators=(',',':'))
new = PcaBiplotData() new = PcaBiplotData()
new.pca_biplot_data = pca_json new.pca_biplot_data = pca_json
new.save() new.save()
......
...@@ -158,6 +158,7 @@ ...@@ -158,6 +158,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row">
<div class="card col-sm-12 col-md-6"> <div class="card col-sm-12 col-md-6">
<h5 class="card-header">PCA : iPPI-DB chemical space</h5> <h5 class="card-header">PCA : iPPI-DB chemical space</h5>
<div class="card-body"> <div class="card-body">
...@@ -166,9 +167,16 @@ ...@@ -166,9 +167,16 @@
<script> <script>
drawCompoundsBiplotChart('pca_biplot', {{ compound.id }}, '{{ compound.best_pXC50_activity_ppi_family|default_if_none:"No target family identified" }}', {{ pca_biplot_data | safe }}, 'physicochemistry'); drawCompoundsBiplotChart('pca_biplot', {{ compound.id }}, '{{ compound.best_pXC50_activity_ppi_family|default_if_none:"No target family identified" }}', {{ pca_biplot_data | safe }}, 'physicochemistry');
</script> </script>
</div>
</div> </div>
<div class="card col-sm-12 col-md-6">
<h5 class="card-header">PCA : Correlation circle</h5>
<div class="card-body">
<img src="data:image/png;base64,{{ pca_biplot_cc }}"\>
</div>
</div> </div>
</div> </div>
</div>
<div class="tab-pane fade" id="pharmacology" role="tabpanel" aria-labelledby="pharmacology-tab"> <div class="tab-pane fade" id="pharmacology" role="tabpanel" aria-labelledby="pharmacology-tab">
<div class="card col-sm-12 col-md-12"> <div class="card col-sm-12 col-md-12">
<h5 class="card-header">Efficiencies: iPPI-DB biplot LE versus LLE</h5> <h5 class="card-header">Efficiencies: iPPI-DB biplot LE versus LLE</h5>
......
import ippidb import json
from django.shortcuts import render from django.shortcuts import render
from django.http import HttpResponseRedirect, Http404 from django.http import HttpResponseRedirect, Http404
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from formtools.wizard.views import SessionWizardView, NamedUrlSessionWizardView from formtools.wizard.views import SessionWizardView, NamedUrlSessionWizardView
import ippidb
from .forms import IdForm, BibliographyForm, PDBForm, ProteinForm, ComplexCompositionForm, ComplexCompositionFormSet, ProteinDomainComplexTypeForm, ProteinDomainComplexForm, PpiForm, PpiComplexForm, PpiAndComplexForm, ProteinFormSet,TestsForm, CompoundForm, CompoundFormSet from .forms import IdForm, BibliographyForm, PDBForm, ProteinForm, ComplexCompositionForm, ComplexCompositionFormSet, ProteinDomainComplexTypeForm, ProteinDomainComplexForm, PpiForm, PpiComplexForm, PpiAndComplexForm, ProteinFormSet,TestsForm, CompoundForm, CompoundFormSet
from .models import Protein, Bibliography, ProteinDomainComplex, ProteinDomainBoundComplex, RefCompoundBiblio, TestActivityDescription, Compound, Ppi, Disease, Taxonomy, LeLleBiplotData, PcaBiplotData from .models import Protein, Bibliography, ProteinDomainComplex, ProteinDomainBoundComplex, RefCompoundBiblio, TestActivityDescription, Compound, Ppi, Disease, Taxonomy, LeLleBiplotData, PcaBiplotData
from .ws import get_pdb_uniprot_mapping from .ws import get_pdb_uniprot_mapping
...@@ -238,5 +240,7 @@ def compound_card(request, compound_id): ...@@ -238,5 +240,7 @@ def compound_card(request, compound_id):
except Compound.DoesNotExist: except Compound.DoesNotExist:
raise Http404("No compound data for %s:%s" % (compound_id)) raise Http404("No compound data for %s:%s" % (compound_id))
le_lle_biplot_data = LeLleBiplotData.objects.get().le_lle_biplot_data le_lle_biplot_data = LeLleBiplotData.objects.get().le_lle_biplot_data
pca_biplot_data = PcaBiplotData.objects.get().pca_biplot_data pca_biplot = json.loads(PcaBiplotData.objects.get().pca_biplot_data)
return render(request, 'compound_card.html', {'compound': compound, 'le_lle_biplot_data': le_lle_biplot_data, 'pca_biplot_data': pca_biplot_data}) pca_biplot_data = json.dumps(pca_biplot['data'])
pca_biplot_cc = pca_biplot['correlation_circle']
return render(request, 'compound_card.html', {'compound': compound, 'le_lle_biplot_data': le_lle_biplot_data, 'pca_biplot_data': pca_biplot_data, 'pca_biplot_cc': pca_biplot_cc})
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment