<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">"""
PCA on drug-events.
"""

import os
import sys
import numpy
import MySQLdb
import StringIO
from pca_module import *
from namedmatrix import NamedMatrix

db = MySQLdb.connect(host="localhost", port=3307, user="root", passwd="enter_your_password",db="project_aers")
c = db.cursor()

query = """
select drug_category, d.name as drug, e.name as event, t_denorm_gtr0
from pred_drug_events_b
join drug_category using (stitch_id)
join drugs d using (stitch_id)
join umls2name e using (umls_id)
where not t_denorm_gtr0 is null
"""
c.execute(query)

data = c.fetchall()

drug2cat = dict()
categories = set()
cat2drug = dict()
for cat, drug, event, score in data:
    if not drug in drug2cat:
        drug2cat[drug] = set(['alldrugs'])
    drug2cat[drug].add(cat)
    if not cat in cat2drug:
        cat2drug[cat] = set()
    cat2drug[cat].add(drug)
    categories.add(cat)

data_str = StringIO.StringIO("\n".join([",".join(map(str,row[1:])) for row in data]))

matrix = NamedMatrix.load_from_file(data_str)

matrix[1:10,1:5]

T, P, E = PCA_nipals2(matrix._data, standardize=True, E_matrices=True)

R = numpy.dot(matrix._data, P.transpose())

results = NamedMatrix(R, matrix.rownames)

# results.save_to_file(os.path.expanduser('~/Dropbox/pca_results.csv'))

display_categories = ['alldrugs'] + [cat for cat in categories if len(cat2drug[cat]) &gt;= 15]
for cat in display_categories:
    catname = cat.replace(' ','_').replace('/','')
    fh = open(os.path.expanduser('~/Dropbox/pca_results_pc12_%s.csv' % catname), 'w')
    fh.close()

for i,drug in enumerate(results.rownames):
    pc1 = results[i,0]
    pc2 = results[i,1]
    for cat in drug2cat[drug]:
        if cat in display_categories:
            catname = cat.replace(' ','_').replace('/','')
            fh = open(os.path.expanduser('~/Dropbox/pca_results_pc12_%s.csv' % catname), 'a+')
            print &gt;&gt; fh, ",".join(map(str,[pc1, pc2]))
            fh.close()

</pre></body></html>