In [1]:
import psycopg2
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig_size = [12,9]
plt.rcParams["figure.figsize"] = fig_size
In [2]:
def findAllSubject(dbname="mimic") :
conn = psycopg2.connect("dbname="+dbname)
cur = conn.cursor()
select_stament = ("SELECT DISTINCT m.subject_id "
" FROM waveformqrst m"
)
cur.execute(select_stament)
select = []
for row in cur :
subject_id=str(row[0]).zfill(5)
select.append(("mimic2wdb/matched/s"+subject_id+"/s"+subject_id+"-",row[0]))
cur.close()
conn.close()
return select
In [3]:
def notExistQRST(record):
conn = psycopg2.connect("dbname=mimic")
cur = conn.cursor()
select_stament = "SELECT id FROM subjectrecord WHERE record LIKE '"+record+"%' LIMIT 1"
# print(cur.mogrify(select_stament))
cur.execute(select_stament)
exist = cur.fetchone() is None
conn.close()
return exist
In [4]:
def difference(first,second):
if first is None or second is None :
return None
else :
return first-second
In [5]:
def getWaveFormqrst(subject_id,dbname="mimic") :
conn = psycopg2.connect("dbname="+dbname)
cur = conn.cursor()
select_stament = ("SELECT subject_id,recorddate,q_i,q_amp,r_i,r_amp,s_i,s_amp,t_i,t_amp "
" FROM waveformqrst m WHERE m.subject_id = %s "
" ORDER BY subject_id,qrtsorder "
)
# print(cur.mogrify(select_stament,(subject_id,)))
cur.execute(select_stament,(subject_id,))
select = []
for row in cur :
subject_id = str(row[0]).zfill(5)
recorddate = row[1]
record = 'mimic3wdb/matched/s'+subject_id+'/s'+subject_id+'-'+recorddate
select.append({'record':record,
'Q_s':row[2],'Q_a':row[3],
'R_s':row[4],'R_a':row[5],
'S_s':row[6],'S_a':row[7],
'T_s':row[8],'T_a':row[9]})
cur.close()
conn.close()
return select
In [6]:
def moveWaves(wave):
retorno = []
for i in range(0,len(wave)-1) :
r = wave[i+1]['R_s']
q_s,r_s,s_s,t_s = wave[i+1]['Q_s'],wave[i]['R_s'],wave[i]['S_s'],wave[i]['T_s']
q_a,r_a,s_a,t_a = wave[i+1]['Q_a'],wave[i]['R_a'],wave[i]['S_a'],wave[i]['T_a']
qt,ts,sr = difference(q_s,t_s),difference(t_s,s_s),difference(s_s,r_s)
diff = difference(r_s,r)
if (qt is not None and qt>0 and qt<1000 and ts is not None and sr is not None and ts+sr<1000
and diff is not None and diff <1000 and ts > 0 ):
retorno.append({'record':wave[i]['record'],'Q_s':q_s,'Q_a':q_a,
'R_s':r_s,'R_a':r_a,
'S_s':s_s,'S_a':s_a,'T_s':t_s,'T_a':t_a,
'qt':qt,'ts':ts,'sr':sr})
return retorno
In [17]:
def saveWave(waves,dbname="mimic") :
conn = psycopg2.connect("dbname="+dbname)
cur = conn.cursor()
insert_statement= '''INSERT INTO rstq(record, r_s, r_a, s_s, s_a, t_s, t_a, q_s, q_a, qt, ts, sr)
SELECT unnest( %(record)s ) ,
unnest( %(r_s)s) , unnest( %(r_a)s),
unnest( %(s_s)s) , unnest( %(s_a)s),
unnest( %(t_s)s) , unnest( %(t_a)s),
unnest( %(q_s)s) , unnest( %(q_a)s),
unnest( %(qt)s) , unnest( %(ts)s), unnest( %(sr)s) '''
print(waves)
record=[r['record'] for r in waves]
r_s,r_a=[r['r_s'] for r in waves],[r['r_a'] for r in waves]
s_s,s_a=[r['s_s'] for r in waves],[r['s_a'] for r in waves]
t_s,t_a=[r['t_s'] for r in waves],[r['t_a'] for r in waves]
q_s,q_a=[r['q_s'] for r in waves],[r['q_a'] for r in waves]
qt,ts,sr=[r['qt'] for r in waves],[r['ts'] for r in waves],[r['sr'] for r in waves]
# print(cur.mogrify(insert_statement,locals()))
cur.execute(insert_statement,locals())
conn.commit()
cur.close()
conn.close()
In [7]:
subjects = findAllSubject()
In [8]:
existentWaves = []
for row in subjects:
# row = subjects[i]
if notExistQRST(row[0]) :
existentWaves.append(row[1])
In [18]:
cleanwaves = []
for ewaves in existentWaves:
waves = getWaveFormqrst(ewaves)
cleanwave = moveWaves(waves)
saveWave(cleanwave)
for wave in cleanwave:
cleanwaves.append(wave)
qt = np.array([item['qt'] for item in cleanwaves])
ts = np.array([item['ts'] for item in cleanwaves])
sr = np.array([item['sr'] for item in cleanwaves])
In [10]:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(ts,qt, sr)
plt.show()
In [11]:
fig = plt.figure()
ax = fig.add_subplot(221)
ax.set_title("qt/ts")
ax.set_xlabel("qt")
ax.scatter(qt,ts)
ax = fig.add_subplot(222)
ax.set_title("ts/sr")
ax.set_xlabel("ts")
ax.scatter(ts,sr)
ax = fig.add_subplot(223)
ax.set_title("sr/qt")
ax.set_xlabel("sr")
ax.scatter(sr,qt)
plt.show()
In [ ]: