Guest User

Untitled

a guest
Apr 20th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.31 KB | None | 0 0
  1. import sys
  2. from PyQt4 import QtGui,QtCore
  3. from PyQt4.QtCore import *
  4. from PyQt4.QtGui import *
  5. import mainwindow
  6. import pandas as pd
  7. import numpy as np
  8. import csv
  9.  
  10. def clickable(widget):
  11.  
  12. class Filter(QObject):
  13.  
  14. clicked = pyqtSignal()
  15.  
  16. def eventFilter(self, obj, event):
  17.  
  18. if obj == widget:
  19. if event.type() == QEvent.MouseButtonRelease:
  20. if obj.rect().contains(event.pos()):
  21. self.clicked.emit()
  22. # The developer can opt for .emit(obj) to get the object within the slot.
  23. return True
  24.  
  25. return False
  26.  
  27. filter = Filter(widget)
  28. widget.installEventFilter(filter)
  29. return filter.clicked
  30.  
  31. def hovered(widget):
  32.  
  33. class Filter(QObject):
  34.  
  35. hover = pyqtSignal()
  36.  
  37. def eventFilter(self, obj, event):
  38.  
  39. if obj == widget:
  40. if event.type() == QEvent.QEvent.HoverMove:
  41. if obj.rect().contains(event.pos()):
  42. self.hover.emit()
  43.  
  44. # The developer can opt for .emit(obj) to get the object within the slot.
  45. return True
  46.  
  47. return False
  48.  
  49. filter = Filter(widget)
  50. widget.installEventFilter(filter)
  51. return filter.hover
  52.  
  53. class MainWindow(QtGui.QMainWindow):
  54.  
  55. def __init__(self):
  56. super(MainWindow, self).__init__()
  57. self.ui = mainwindow.Ui_MainWindow()
  58. self.ui.setupUi(self)
  59. self.list_symptoms()
  60. self.pressed=False
  61. # self.event=QtGui.QMouseEvent()
  62. global count,cnt,url,nm
  63. nm=0
  64. cnt=1
  65. count=10
  66.  
  67. self.stack=QtGui.QHBoxLayout(self.ui.scrollAreaWidgetContents)
  68. self.ui.selct_btn.clicked.connect(self.mvlist2)
  69. self.ui.deselct_btn.clicked.connect(self.mvlist1)
  70. self.ui.predictButton.clicked.connect(self.predict)
  71. self.ui.pushButton.clicked.connect(self.hidden)
  72. #clickable(self.ui.scrollArea).connect(self.openWeb)
  73.  
  74. def list_symptoms(self):
  75. global df
  76. df=pd.read_csv('dataset_clean.csv')
  77. list=df['Target'].values
  78. from collections import Counter
  79. c=Counter(list)
  80. c=c.items()
  81. #print c
  82. df1=pd.DataFrame(c)
  83. df1=df1.sort_values(by=[1],ascending=[False])
  84. #print df1
  85. list1=df1[0].values.tolist()
  86. #list=sorted(list,key=str.lower)
  87. for item in list1:
  88. self.ui.symp_List.addItem(str(item).title())
  89.  
  90. def mvlist1(self):
  91. self.ui.symp_List.addItem(self.ui.sel_Symp_List.currentItem().text())
  92. self.ui.sel_Symp_List.takeItem(self.ui.sel_Symp_List.currentIndex().row())
  93.  
  94. def mvlist2(self):
  95. self.ui.sel_Symp_List.addItem(self.ui.symp_List.currentItem().text())
  96. self.ui.symp_List.takeItem(self.ui.symp_List.currentIndex().row())
  97.  
  98. # def mousePressEvent(self.event):
  99. # e=self.event
  100. # if
  101.  
  102. def extract(self,data):
  103. dis=data['Disease'].values
  104. from collections import Counter
  105. dis1=Counter(dis)
  106. dis1=dis1.items()
  107. #print(dis1)
  108. gdf=pd.DataFrame(dis1,columns=["Disease","Count"])
  109. gdf=gdf.sort_values(by=['Count'],ascending=[False])
  110. gdf=gdf['Disease'].values.tolist()
  111.  
  112. #print(gdf)
  113. r1=[]
  114. for i in gdf:
  115. re=data.loc[data['Disease']==i]
  116. re1=re['Accuracy'].values.mean()
  117. max_C=re.sort_values(by=['Accuracy'],ascending=[False])
  118. max_A=re['Accuracy'].values.max()
  119. max_C=max_C.loc[max_C['Accuracy']==max_A]
  120. max_C=max_C['Cluster'].values
  121. try:
  122. des = int(max_C[0])
  123. except IndexError:
  124. des = int(max_C)
  125. #max_C=max_C.ix[0]
  126. # print("---------------------------------------------------------------")
  127. # print(i)
  128. # print("---------------------------------------------------------------")
  129. # print(max_A)
  130. # print(des)
  131. # print("---------------------------------------------------------------")
  132. r1.append((i,int(re1),des))
  133. #print(r1)
  134.  
  135. rr=[]
  136. for cclass in range(data['Cluster'].values.max()+1):
  137. data1=data.ix[data['Cluster']==cclass]
  138. l=data1['True Positive Rate'].values
  139. try:
  140. l=sum(l) / float(len(l))
  141. except ZeroDivisionError:
  142. l=0
  143. rr.append((cclass,l))
  144. re=pd.DataFrame(r1,columns=["Disease","Accuracy","Best_Cluster"])
  145.  
  146. rep=Counter(re['Best_Cluster'].values.tolist())
  147. rep=rep.items()
  148. rep=pd.DataFrame(rep,columns=["Cluster","Count"])
  149. rep1=rep['Count'].values.max()
  150. rep=rep[rep['Count']==rep1]
  151. rep=rep['Cluster'].values
  152. #print(rep)
  153. re_r=pd.DataFrame()
  154. try:
  155.  
  156. for i in rep:
  157. re=re[re['Best_Cluster']==int(i)]
  158. re_r=pd.concat([re_r,re],axis=0)
  159. except TypeError:
  160. re_r=re[re['Best_Cluster']==int(rep)]
  161. #print(re_r)
  162. return re_r
  163.  
  164. # for i ,j in dis:
  165. # ex_df1=data.loc[data['Disease'] == str(i)]
  166. # print ex_df1
  167. #data_e=pd.DataFrame(lst_e,columns=["Disease","Percent","Cluster"])
  168.  
  169.  
  170. def txtreturn(self,text):
  171. global t,ddf
  172. # return url
  173. t=ddf.loc[ddf['Frame'] == str(text),'Disease'].item()
  174. df3=pd.read_csv('disease.csv')
  175. url1=df3.loc[df3['Source'] == str(t), 'Link'].item()
  176. self.openWeb(url1)
  177. self.qrcode(t)
  178. #print t
  179. return t
  180.  
  181.  
  182. def hidden(self):
  183. self.setFixedSize(720,500)
  184.  
  185. def openWeb(self,url):
  186. from PyQt4.QtCore import QUrl
  187. #print url
  188. self.setFixedSize(1310,500)
  189. self.ui.webView.load(QUrl(url))
  190. #self.ui.lineEdit.setText("")
  191.  
  192. def qrcode(self,name):
  193. self.ui.image.setStyleSheet("border-image: url('img/"+str(name)+".png');")
  194.  
  195.  
  196. def label(self,text,level,percent):
  197. from PyQt4.QtCore import QObject, SIGNAL
  198. global count,cnt,nm,ddf,lss
  199. frame = QtGui.QFrame()
  200. #frame.setObjectName(QString("frame"+str(cnt))
  201. frame.setGeometry(QtCore.QRect(count, 25, 201, 101))
  202.  
  203. if(level=="extreme"):
  204. frame.setStyleSheet("background-color: rgb(170, 0, 0);\nborder:0.5px solid;\nborder-radius: 5px;\nborder-color: qlineargradient(spread:pad, x1:0.519, y1:0, x2:0.531, y2:1, stop:0.0225989 rgba(164, 164, 164, 255), stop:1 rgba(255, 255, 255, 255));")
  205. if(level=="high"):
  206. frame.setStyleSheet("background-color: rgb(255, 96, 0);\nborder:0.5px solid;\nborder-radius: 5px;\nborder-color: qlineargradient(spread:pad, x1:0.519, y1:0, x2:0.531, y2:1, stop:0.0225989 rgba(164, 164, 164, 255), stop:1 rgba(255, 255, 255, 255));")
  207. if(level=="low"):
  208. frame.setStyleSheet("background-color: rgb(0, 197, 0);\nborder:0.5px solid;\nborder-radius: 5px;\nborder-color: qlineargradient(spread:pad, x1:0.519, y1:0, x2:0.531, y2:1, stop:0.0225989 rgba(164, 164, 164, 255), stop:1 rgba(255, 255, 255, 255));")
  209. #frame.setStyleSheet("background-color: rgb(255, 0, 0);")
  210. #frame.setFrameShape(QtGui.QFrame.StyledPanel)
  211.  
  212. lbl = QtGui.QLabel(frame)
  213. lbl.setGeometry(QtCore.QRect(2, 5, 196, 61))
  214. lbl.setWordWrap(True)
  215. lbl.setStyleSheet("font: 14pt \"Segoe UI\";\nborder:none;")
  216. lbl.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
  217. lbl.setText(text.title())
  218. lbl_2 = QtGui.QLabel(frame)
  219. lbl_2.setGeometry(QtCore.QRect(20, 55, 69, 41))
  220. lbl_2.setStyleSheet("font: 75 28pt \"Segoe UI\";\nborder:none;")
  221. lbl_2.setAlignment(QtCore.Qt.AlignCenter)
  222. st=str(percent)
  223. st+="%"
  224. lbl_2.setText(st)
  225. count=count+210
  226. self.stack.addChildWidget(frame)
  227. frame.setMouseTracking(True)
  228. effect=QtGui.QGraphicsDropShadowEffect()
  229. effect.setBlurRadius(50)
  230. frame.setGraphicsEffect(effect)
  231. frame.setObjectName(str("Frame"+str(nm)))
  232. lss.append((str("Frame"+str(nm)),text))
  233. clickable(frame).connect(lambda: self.txtreturn(str(frame.objectName())))
  234. cnt=cnt+1
  235. nm=nm+1
  236. #frame.mouseMoveEvent=
  237.  
  238. def addSublabel(self,text,xaxis):
  239.  
  240. label=QtGui.QLabel()
  241. label.setText(text)
  242. label.setAlignment(QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
  243. label.setGeometry(QtCore.QRect(xaxis, 0, (count-20), 20))
  244. label.setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.588, fx:0.5, fy:0.5, stop:0 rgba(117, 117, 117, 255), stop:1 rgba(142, 142, 142, 255));")
  245. self.stack.addChildWidget(label)
  246.  
  247. def addLine(self,xaxis,height):
  248. ln = QtGui.QFrame()
  249. ln.setGeometry(QtCore.QRect(xaxis, 0, 6, height))
  250. ln.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0, y1:0.534, x2:1, y2:0.534, stop:0 rgba(112, 112, 112, 255), stop:1 rgba(215, 215, 215, 255));")
  251. self.stack.addChildWidget(ln)
  252.  
  253. def classifier(self,df_class,classified_data):
  254. from sklearn.cross_validation import train_test_split
  255. # To model the Gaussian Navie Bayes classifier
  256. from sklearn.naive_bayes import GaussianNB
  257. # To calculate the accuracy score of the model
  258. from sklearn.metrics import accuracy_score
  259. from sklearn.metrics import confusion_matrix
  260. cluster,accr,tpr,fpr,omit,dtr,fnr,ii=[],[],[],[],[],[],[],[]
  261. for cclass in range(classified_data.max()+1):
  262. data=df_class.copy()
  263. data=data.loc[df_class['Class'] == cclass]
  264. dummies = pd.get_dummies(data['Target']).rename(columns=lambda x: "Target=" + str(x))
  265. features = dummies
  266. classes=np.unique(features)
  267. from collections import Counter
  268. disease_names=Counter(data['Source'].values)
  269. disease_names=disease_names.items()
  270. disease_names=pd.DataFrame(disease_names)
  271. # print("Cluster "+str(cclass))
  272. # print(disease_names)
  273. disease_names=disease_names[0].values.tolist()
  274. target = pd.get_dummies(data['Source']).rename(columns=lambda x: "Source=" + str(x))
  275. target=pd.concat([target,dummies],axis=1)
  276. target_train, target_test,features_train, features_test = train_test_split(target,features,test_size = 0.33, random_state = 10)
  277. result_clf=pd.DataFrame()
  278. k=0
  279. # print("Length of Features_Train"+str(len(features_train)))
  280. # print("Target Train")
  281. # print(target_train)
  282. # print("Target Test")
  283. # print(target_test)
  284. for i in disease_names:
  285. try:
  286. clf = GaussianNB()
  287. lst1=[row[k] for row in target_train.values]
  288. # print("List 1")
  289. # print(lst1)
  290. lst2=[row[k] for row in target_test.values]
  291. # print("List 2")
  292. # print(lst2)
  293. # print("Length of Lst1 "+str(len(lst1)))
  294. # print("Length of Lst2 "+str(len(lst2)))
  295. clf.fit(features_train.values,lst1)
  296. target_pred = clf.predict(features_test.values)
  297. acc=accuracy_score(lst2, target_pred, normalize = True)
  298. # print("Prediction")
  299. # print(target_pred)
  300. # print("Accuracy_Rate :"+str(acc))
  301. accr.append(acc*100)
  302. matrix=confusion_matrix(lst2, target_pred, classes)
  303. # print("Confusion Matrix")
  304. # print(matrix)
  305. FP = np.sum(matrix, axis=0) - np.diag(matrix)
  306. FN = np.sum(matrix,axis=1) - np.diag(matrix)
  307. TP = np.diag(matrix)
  308. TN = np.sum(matrix) - (FP + FN + TP)
  309. # Sensitivity, hit rate, recall, or true positive rate
  310. TPR = TP/(TP+FN)
  311. # Specificity or true negative rate
  312. TNR = TN/(TN+FP)
  313. # Precision or positive predictive value
  314. PPV = TP/(TP+FP)
  315. # Negative predictive value
  316. NPV = TN/(TN+FN)
  317. # Fall out or false positive rate
  318. FPR = FP/(FP+TN)
  319. # False negative rate
  320. FNR = FN/(TP+FN)
  321. # False discovery rate
  322. FDR = FP/(TP+FP)
  323. DR = TP/ (TP+TN)
  324. # print("Detection Rate")
  325. # print(DR.mean()*100)
  326. dtr.append(DR.mean()*100)
  327. # print("True Positive Rate :")
  328. # print(TPR.mean())
  329. tpr.append(TPR.mean()*100)
  330. # print("False Positive Rate :")
  331. # print(FPR.mean())
  332. fpr.append(FPR.mean()*100)
  333. # print("False Negative Rate :")
  334. # print(FNR.mean())
  335. fnr.append(FNR.mean()*100)
  336. cluster.append(cclass)
  337. ii.append(i)
  338. # print("valueof K is "+str(k))
  339. # k=k+1
  340.  
  341. except ValueError:
  342. print("No Sample Data Found the Disease "+i+" is removed from the operation")
  343. k=k+1
  344.  
  345. f = pd.DataFrame()
  346. f['Cluster']=pd.Series(cluster)
  347. f['Disease']=pd.Series(ii)
  348. f['Accuracy']=pd.Series(accr)
  349. f['True Positive Rate']=pd.Series(tpr)
  350. f['False Positive Rate']=pd.Series(fpr)
  351. f['Detection Rate']=pd.Series(dtr)
  352. return f
  353.  
  354. def makePercent(self,c1,c2):
  355. lt=[]
  356. for i,j in c1:
  357. for l,k in c2:
  358. if(l==i):
  359. percent=(float(j)/float(k))*100
  360. percent=int(percent)
  361. # print(k,j)
  362. # print(l,percent)
  363. if(percent<40):
  364. serious="low"
  365. if(percent>40):
  366. serious="high"
  367. if(percent>60):
  368. serious="extreme"
  369. if(percent>15):
  370. lt.append((i,serious,percent))
  371. return lt
  372.  
  373. # def makepercent1(self,dataf):
  374.  
  375.  
  376.  
  377. def predict(self):
  378. global df
  379. global count
  380. kg=float(self.ui.kg.text())
  381. pound=kg*2.20462
  382. pound=int(round(pound))
  383. # print("Pound")
  384. # print(pound)
  385. list=[]
  386. for c in range(self.ui.sel_Symp_List.count()):
  387. list.append(str(self.ui.sel_Symp_List.item(c).text().toLower()))
  388. # print(list)
  389. diseas=df['Source'].values
  390. from collections import Counter
  391. x=Counter(diseas)
  392. x=x.items()
  393. # print(x)
  394. df1=df[df['Target'].isin(list)]
  395. # print(df1)
  396.  
  397. #clustering starts
  398. global km_df
  399. km_df=pd.DataFrame(df1.values,columns=['Source','Target','Weight'])
  400. #km_df['Weight']=pd.to_numeric(km_df['Weight'])
  401.  
  402. km_df1=km_df.copy()
  403. del km_df['Weight']
  404. for y in km_df.columns:
  405. c=str(km_df[y].dtype)
  406. # print(c)
  407. if(c=="object"):
  408. dummies = pd.get_dummies(km_df[y]).rename(columns=lambda x: y+ "=" + str(x))
  409. km_df = pd.concat([km_df, dummies], axis=1)
  410. del km_df[y]
  411. #print(km_df)
  412.  
  413. from sklearn.cluster import KMeans
  414. km = KMeans(n_clusters=5,init='k-means++', n_init=70, algorithm='auto')
  415. rst = km.fit(km_df)
  416. centroids = rst.cluster_centers_
  417. #clu=rst.transform(df)
  418.  
  419. labels = rst.labels_
  420. #km_df['Class']=pd.Series(labels,index=km_df.index)
  421. km_df1['Class']=pd.Series(labels,index=km_df.index)
  422. #km_df=km_df.idxmax(axis=1)
  423. # print(km_df1)
  424. accuracy_matrix=self.classifier(km_df1,labels)
  425. #print(accuracy_matrix)
  426. #exc=self.extract(accuracy_matrix)
  427. exc=self.extract(accuracy_matrix)
  428. print exc
  429. dises=df1['Source'].values
  430. z=Counter(dises)
  431. z=z.items()
  432. lst=pd.DataFrame({'Weight':df1['Weight'].unique()})
  433. # print(lst)
  434. sel_Pound=lst.ix[(lst['Weight']-pound).abs().argsort()[:2]]
  435. sel_Pound=sel_Pound['Weight'].tolist()
  436. # print(sel_Pound)
  437. df2=df1[df1['Weight'].isin(sel_Pound)]
  438. # print("Selected Prediction")
  439. # print(df2)
  440. disease=df2['Source'].values
  441. c=Counter(disease)
  442. c=c.items()
  443. # print(c)
  444. global ddf,lss
  445. lss=[]
  446. cnt=0
  447. percent=0
  448. serious=""
  449. t="As per Weight"
  450. cn=count
  451. lt=self.makePercent(c,x)
  452.  
  453. pr_df=pd.DataFrame(lt,columns=["Disease","Serious","Percent"])
  454. pr_df=pr_df.sort_values("Percent",ascending=False)
  455. # print(pr_df)
  456. for i,j,k in pr_df.values:
  457. self.label(i,j,k)
  458. # print(count)
  459. self.addLine(count,self.ui.scrollAreaWidgetContents.height())
  460. count+=10
  461. self.ui.scrollAreaWidgetContents.resize(count,self.ui.scrollAreaWidgetContents.height())
  462. self.addSublabel(t,cn)
  463. ls=self.makePercent(z,x)
  464. lz=[]
  465. for i,j,k in ls:
  466. for f in exc['Disease'].values:
  467.  
  468. if i==f:
  469. lz.append((i,j,k))
  470.  
  471. pr_df1=pd.DataFrame(lz,columns=["Disease","Serious","Percent"])
  472. pr_df1=pr_df1.sort_values("Percent",ascending=False)
  473. # print(pr_df1)
  474. q="As Per Symptoms"
  475. cn=count
  476. for i,j,k in pr_df1.values:
  477. self.label(i,j,k)
  478. self.addSublabel(q,cn)
  479. # print(count)
  480. # print("Finished Prediction")
  481. self.ui.scrollAreaWidgetContents.resize(count,self.ui.scrollAreaWidgetContents.height())
  482. # print("Finished Prediction")
  483. ddf=pd.DataFrame(lss,columns=["Frame","Disease"])
  484. # print ddf
  485. self.setFixedSize(720,500)
  486.  
  487. app= QtGui.QApplication(sys.argv)
  488. my_mainWindow = MainWindow()
  489. #my_mainWindow.setWindowFlags(QtCore.Qt.WindowMaximizeButtonHint)
  490. my_mainWindow.setFixedSize(720,350)
  491. my_mainWindow.show()
  492. sys.exit(app.exec_())
Add Comment
Please, Sign In to add comment