from tkinter import * import numpy as np import pandas as pd #List of the symptoms is listed here in list l1. l1=['back_pain','constipation','abdominal_pain','diarrhoea','mild_fever','yellow_urine', 'yellowing_of_eyes','acute_liver_failure','fluid_overload','swelling_of_stomach', 'swelled_lymph_nodes','malaise','blurred_and_distorted_vision','phlegm','throat_irritation', 'redness_of_eyes','sinus_pressure','runny_nose','congestion','chest_pain','weakness_in_limbs', 'fast_heart_rate','pain_during_bowel_movements','pain_in_anal_region','bloody_stool', 'irritation_in_anus','neck_pain','dizziness','cramps','bruising','obesity','swollen_legs', 'swollen_blood_vessels','puffy_face_and_eyes','enlarged_thyroid','brittle_nails', 'swollen_extremeties','excessive_hunger','extra_marital_contacts','drying_and_tingling_lips', 'slurred_speech','knee_pain','hip_joint_pain','muscle_weakness','stiff_neck','swelling_joints', 'movement_stiffness','spinning_movements','loss_of_balance','unsteadiness', 'weakness_of_one_body_side','loss_of_smell','bladder_discomfort','foul_smell_of urine', 'continuous_feel_of_urine','passage_of_gases','internal_itching','toxic_look_(typhos)', 'depression','irritability','muscle_pain','altered_sensorium','red_spots_over_body','belly_pain', 'abnormal_menstruation','dischromic _patches','watering_from_eyes','increased_appetite','polyuria','family_history','mucoid_sputum', 'rusty_sputum','lack_of_concentration','visual_disturbances','receiving_blood_transfusion', 'receiving_unsterile_injections','coma','stomach_bleeding','distention_of_abdomen', 'history_of_alcohol_consumption','fluid_overload','blood_in_sputum','prominent_veins_on_calf', 'palpitations','painful_walking','pus_filled_pimples','blackheads','scurring','skin_peeling', 'silver_like_dusting','small_dents_in_nails','inflammatory_nails','blister','red_sore_around_nose', 'yellow_crust_ooze'] #List of Diseases is listed in list disease. disease=['Fungal infection','Allergy','GERD','Chronic cholestasis','Drug Reaction', 'Peptic ulcer diseae','AIDS','Diabetes','Gastroenteritis','Bronchial Asthma','Hypertension', ' Migraine','Cervical spondylosis', 'Paralysis (brain hemorrhage)','Jaundice','Malaria','Chicken pox','Dengue','Typhoid','hepatitis A', 'Hepatitis B','Hepatitis C','Hepatitis D','Hepatitis E','Alcoholic hepatitis','Tuberculosis', 'Common Cold','Pneumonia','Dimorphic hemmorhoids(piles)', 'Heartattack','Varicoseveins','Hypothyroidism','Hyperthyroidism','Hypoglycemia','Osteoarthristis', 'Arthritis','(vertigo) Paroymsal Positional Vertigo','Acne','Urinary tract infection','Psoriasis', 'Impetigo'] l2=[] for i in range(0,len(l1)): l2.append(0) df=pd.read_csv("Prototype.csv") #Replace the values in the imported file by pandas by the inbuilt function replace in pandas. df.replace({'prognosis':{'Fungal infection':0,'Allergy':1,'GERD':2,'Chronic cholestasis':3,'Drug Reaction':4, 'Peptic ulcer diseae':5,'AIDS':6,'Diabetes ':7,'Gastroenteritis':8,'Bronchial Asthma':9,'Hypertension ':10, 'Migraine':11,'Cervical spondylosis':12, 'Paralysis (brain hemorrhage)':13,'Jaundice':14,'Malaria':15,'Chicken pox':16,'Dengue':17,'Typhoid':18,'hepatitis A':19, 'Hepatitis B':20,'Hepatitis C':21,'Hepatitis D':22,'Hepatitis E':23,'Alcoholic hepatitis':24,'Tuberculosis':25, 'Common Cold':26,'Pneumonia':27,'Dimorphic hemmorhoids(piles)':28,'Heart attack':29,'Varicose veins':30,'Hypothyroidism':31, 'Hyperthyroidism':32,'Hypoglycemia':33,'Osteoarthristis':34,'Arthritis':35, '(vertigo) Paroymsal Positional Vertigo':36,'Acne':37,'Urinary tract infection':38,'Psoriasis':39, 'Impetigo':40}},inplace=True) #check the df #print(df.head()) X= df[l1] #print(X) y = df[["prognosis"]] np.ravel(y) #print(y) #Read a csv named Testing.csv tr=pd.read_csv("Prototype-1.csv") #Use replace method in pandas. tr.replace({'prognosis':{'Fungal infection':0,'Allergy':1,'GERD':2,'Chronic cholestasis':3,'Drug Reaction':4, 'Peptic ulcer diseae':5,'AIDS':6,'Diabetes ':7,'Gastroenteritis':8,'Bronchial Asthma':9,'Hypertension ':10, 'Migraine':11,'Cervical spondylosis':12, 'Paralysis (brain hemorrhage)':13,'Jaundice':14,'Malaria':15,'Chicken pox':16,'Dengue':17,'Typhoid':18,'hepatitis A':19, 'Hepatitis B':20,'Hepatitis C':21,'Hepatitis D':22,'Hepatitis E':23,'Alcoholic hepatitis':24,'Tuberculosis':25, 'Common Cold':26,'Pneumonia':27,'Dimorphic hemmorhoids(piles)':28,'Heart attack':29,'Varicose veins':30,'Hypothyroidism':31, 'Hyperthyroidism':32,'Hypoglycemia':33,'Osteoarthristis':34,'Arthritis':35, '(vertigo) Paroymsal Positional Vertigo':36,'Acne':37,'Urinary tract infection':38,'Psoriasis':39, 'Impetigo':40}},inplace=True) X_test= tr[l1] y_test = tr[["prognosis"]] #print(y_test) np.ravel(y_test) def DecisionTree(): from sklearn import tree clf3 = tree.DecisionTreeClassifier() clf3 = clf3.fit(X,y) from sklearn.metrics import accuracy_score y_pred=clf3.predict(X_test) print(accuracy_score(y_test, y_pred)) print(accuracy_score(y_test, y_pred,normalize=False)) psymptoms = [Symptom1.get(),Symptom2.get(),Symptom3.get(),Symptom4.get(),Symptom5.get()] for k in range(0,len(l1)): for z in psymptoms: if(z==l1[k]): l2[k]=1 inputtest = [l2] predict = clf3.predict(inputtest) predicted=predict[0] h='no' for a in range(0,len(disease)): if(predicted == a): h='yes' break if (h=='yes'): t1.delete("1.0", END) t1.insert(END, disease[a]) else: t1.delete("1.0", END) t1.insert(END, "Not Found") def randomforest(): from sklearn.ensemble import RandomForestClassifier clf4 = RandomForestClassifier() clf4 = clf4.fit(X,np.ravel(y)) # calculating accuracy from sklearn.metrics import accuracy_score y_pred=clf4.predict(X_test) print(accuracy_score(y_test, y_pred)) print(accuracy_score(y_test, y_pred,normalize=False)) psymptoms = [Symptom1.get(),Symptom2.get(),Symptom3.get(),Symptom4.get(),Symptom5.get()] for k in range(0,len(l1)): for z in psymptoms: if(z==l1[k]): l2[k]=1 inputtest = [l2] predict = clf4.predict(inputtest) predicted=predict[0] h='no' for a in range(0,len(disease)): if(predicted == a): h='yes' break if (h=='yes'): t2.delete("1.0", END) t2.insert(END, disease[a]) else: t2.delete("1.0", END) t2.insert(END, "Not Found") def NaiveBayes(): from sklearn.naive_bayes import GaussianNB gnb = GaussianNB() gnb=gnb.fit(X,np.ravel(y)) from sklearn.metrics import accuracy_score y_pred=gnb.predict(X_test) print(accuracy_score(y_test, y_pred)) print(accuracy_score(y_test, y_pred,normalize=False)) psymptoms = [Symptom1.get(),Symptom2.get(),Symptom3.get(),Symptom4.get(),Symptom5.get()] for k in range(0,len(l1)): for z in psymptoms: if(z==l1[k]): l2[k]=1 inputtest = [l2] predict = gnb.predict(inputtest) predicted=predict[0] h='no' for a in range(0,len(disease)): if(predicted == a): h='yes' break if (h=='yes'): t3.delete("1.0", END) t3.insert(END, disease[a]) else: t3.delete("1.0", END) t3.insert(END, "Not Found") # GUI stuff.............................................................................. root = Tk() root.configure(background='white') Symptom1 = StringVar() Symptom1.set("Select Here") Symptom2 = StringVar() Symptom2.set("Select Here") Symptom3 = StringVar() Symptom3.set("Select Here") Symptom4 = StringVar() Symptom4.set("Select Here") Symptom5 = StringVar() Symptom5.set("Select Here") Name = StringVar() w2 = Label(root, justify=LEFT, text="Disease Predictor using Machine Learning", fg="Blue", bg="White") w2.config(font=("Times",30,"bold ")) w2.grid(row=1, column=0, columnspan=2, padx=100) w2 = Label(root, justify=LEFT, text="A Project by C N G", fg="Black", bg="Grey") w2.config(font=("Times",30,"bold ")) w2.grid(row=2, column=0, columnspan=2, padx=100) NameLb = Label(root, text="Name of the Patient", fg="Black", bg="grey") NameLb.config(font=("Times",15,"bold italic")) NameLb.grid(row=6, column=0, pady=15, sticky=W) S1Lb = Label(root, text="Symptom 1", fg="Black", bg="grey") S1Lb.config(font=("Times",15,"bold italic")) S1Lb.grid(row=7, column=0, pady=10, sticky=W) S2Lb = Label(root, text="Symptom 2", fg="Black", bg="grey") S2Lb.config(font=("Times",15,"bold italic")) S2Lb.grid(row=8, column=0, pady=10, sticky=W) S3Lb = Label(root, text="Symptom 3", fg="Black",bg="grey") S3Lb.config(font=("Times",15,"bold italic")) S3Lb.grid(row=9, column=0, pady=10, sticky=W) S4Lb = Label(root, text="Symptom 4", fg="Black", bg="grey") S4Lb.config(font=("Times",15,"bold italic")) S4Lb.grid(row=10, column=0, pady=10, sticky=W) S5Lb = Label(root, text="Symptom 5", fg="Black", bg="grey") S5Lb.config(font=("Times",15,"bold italic")) S5Lb.grid(row=11, column=0, pady=10, sticky=W) lrLb = Label(root, text="DecisionTree", fg="white", bg="red") lrLb.config(font=("Times",15,"bold italic")) lrLb.grid(row=15, column=0, pady=10,sticky=W) destreeLb = Label(root, text="RandomForest", fg="Red", bg="silver") destreeLb.config(font=("Times",15,"bold italic")) destreeLb.grid(row=17, column=0, pady=10, sticky=W) ranfLb = Label(root, text="NaiveBayes", fg="White", bg="green") ranfLb.config(font=("Times",15,"bold italic")) ranfLb.grid(row=19, column=0, pady=10, sticky=W) OPTIONS = sorted(l1) NameEn = Entry(root, textvariable=Name) NameEn.grid(row=6, column=1) S1 = OptionMenu(root, Symptom1,*OPTIONS) S1.grid(row=7, column=1) S2 = OptionMenu(root, Symptom2,*OPTIONS) S2.grid(row=8, column=1) S3 = OptionMenu(root, Symptom3,*OPTIONS) S3.grid(row=9, column=1) S4 = OptionMenu(root, Symptom4,*OPTIONS) S4.grid(row=10, column=1) S5 = OptionMenu(root, Symptom5,*OPTIONS) S5.grid(row=11, column=1) dst = Button(root, text="Prediction 1", command=DecisionTree,bg="Red",fg="Black") dst.config(font=("Times",15,"bold italic")) dst.grid(row=8, column=3,padx=10) rnf = Button(root, text="Prediction 2", command=randomforest,bg="White",fg="Black") rnf.config(font=("Times",15,"bold italic")) rnf.grid(row=9, column=3,padx=10) lr = Button(root, text="Prediction 3", command=NaiveBayes,bg="Green",fg="Black") lr.config(font=("Times",15,"bold italic")) lr.grid(row=10, column=3,padx=10) t1 = Text(root, height=1, width=40,bg="white",fg="red") t1.config(font=("Times",15,"bold italic")) t1.grid(row=15, column=1, padx=10) t2 = Text(root, height=1, width=40,bg="White",fg="Blue") t2.config(font=("Times",15,"bold italic")) t2.grid(row=17, column=1 , padx=10) t3 = Text(root, height=1, width=40,bg="white",fg="white") t3.config(font=("Times",15,"bold italic")) t3.grid(row=19, column=1 , padx=10) root.mainloop()