Commit 3ec0eded authored by Dinuka Nawanjana's avatar Dinuka Nawanjana

Initial commit

parent 7249487b
Bp,Sg,Al,Su,Rbc,Bu,Sc,Sod,Pot,Hemo,Wbcc,Rbcc,Htn,Class
80.0,1.02,1.0,0.0,1.0,36.0,1.2,137.53,4.63,15.4,7800.0,5.2,1.0,1
50.0,1.02,4.0,0.0,1.0,18.0,0.8,137.53,4.63,11.3,6000.0,4.71,0.0,1
80.0,1.01,2.0,3.0,1.0,53.0,1.8,137.53,4.63,9.6,7500.0,4.71,0.0,1
70.0,1.005,4.0,0.0,1.0,56.0,3.8,111.0,2.5,11.2,6700.0,3.9,1.0,1
80.0,1.01,2.0,0.0,1.0,26.0,1.4,137.53,4.63,11.6,7300.0,4.6,0.0,1
90.0,1.015,3.0,0.0,1.0,25.0,1.1,142.0,3.2,12.2,7800.0,4.4,1.0,1
70.0,1.01,0.0,0.0,1.0,54.0,24.0,104.0,4.0,12.4,8406.0,4.71,0.0,1
76.0,1.015,2.0,4.0,1.0,31.0,1.1,137.53,4.63,12.4,6900.0,5.0,0.0,1
100.0,1.015,3.0,0.0,1.0,60.0,1.9,137.53,4.63,10.8,9600.0,4.0,1.0,1
90.0,1.02,2.0,0.0,0.0,107.0,7.2,114.0,3.7,9.5,12100.0,3.7,1.0,1
60.0,1.01,2.0,4.0,1.0,55.0,4.0,137.53,4.63,9.4,8406.0,4.71,1.0,1
70.0,1.01,3.0,0.0,0.0,60.0,2.7,131.0,4.2,10.8,4500.0,3.8,1.0,1
70.0,1.015,3.0,1.0,1.0,72.0,2.1,138.0,5.8,9.7,12200.0,3.4,1.0,1
70.0,1.02,1.0,0.0,1.0,86.0,4.6,135.0,3.4,9.8,8406.0,4.71,1.0,1
80.0,1.01,3.0,2.0,1.0,90.0,4.1,130.0,6.4,5.6,11000.0,2.6,1.0,1
80.0,1.015,3.0,0.0,1.0,162.0,9.6,141.0,4.9,7.6,3800.0,2.8,1.0,1
70.0,1.015,2.0,0.0,1.0,46.0,2.2,138.0,4.1,12.6,8406.0,4.71,0.0,1
80.0,1.02,1.0,0.0,1.0,87.0,5.2,139.0,3.7,12.1,8406.0,4.71,1.0,1
100.0,1.025,0.0,3.0,1.0,27.0,1.3,135.0,4.3,12.7,11400.0,4.3,1.0,1
60.0,1.015,1.0,0.0,1.0,31.0,1.6,137.53,4.63,10.3,5300.0,3.7,1.0,1
80.0,1.015,2.0,0.0,0.0,148.0,3.9,135.0,5.2,7.7,9200.0,3.2,1.0,1
90.0,1.02,1.0,0.0,1.0,180.0,76.0,4.5,4.63,10.9,6200.0,3.6,1.0,1
80.0,1.025,4.0,0.0,1.0,163.0,7.7,136.0,3.8,9.8,6900.0,3.4,1.0,1
70.0,1.01,0.0,0.0,1.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
100.0,1.015,4.0,0.0,1.0,50.0,1.4,129.0,4.0,11.1,8300.0,4.6,1.0,1
60.0,1.025,0.0,0.0,1.0,75.0,1.9,141.0,5.2,9.9,8400.0,3.7,1.0,1
80.0,1.015,0.0,0.0,1.0,45.0,2.4,140.0,3.4,11.6,10300.0,4.0,1.0,1
70.0,1.01,3.0,4.0,1.0,87.0,2.7,130.0,4.0,12.5,9600.0,4.1,1.0,1
70.0,1.02,1.0,3.0,1.0,31.0,1.4,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.005,1.0,0.0,0.0,28.0,1.4,137.53,4.63,12.9,8406.0,4.71,0.0,1
70.0,1.02,1.0,0.0,1.0,155.0,7.3,132.0,4.9,12.53,8406.0,4.71,1.0,1
90.0,1.015,3.0,0.0,1.0,33.0,1.5,141.0,4.6,10.1,7800.0,4.0,0.0,1
90.0,1.01,1.0,1.0,1.0,39.0,1.5,133.0,4.9,11.3,9600.0,4.0,1.0,1
100.0,1.02,2.0,0.0,0.0,55.0,2.5,137.53,4.63,10.1,8406.0,4.71,1.0,1
70.0,1.01,1.0,0.0,1.0,153.0,5.2,137.53,4.63,12.53,8406.0,4.71,0.0,1
90.0,1.02,2.0,1.0,0.0,39.0,2.0,137.53,4.63,12.0,9800.0,4.9,1.0,1
70.0,1.015,1.0,0.0,1.0,29.0,1.8,133.0,3.9,10.3,8406.0,4.71,1.0,1
80.0,1.02,1.0,0.0,1.0,65.0,3.4,141.0,4.7,9.7,6900.0,2.5,1.0,1
80.0,1.02,3.0,0.0,0.0,103.0,4.1,132.0,5.9,12.5,8406.0,4.71,1.0,1
80.0,1.01,2.0,2.0,1.0,70.0,3.4,136.0,4.2,13.0,9800.0,4.2,1.0,1
90.0,1.01,2.0,0.0,1.0,80.0,2.1,137.53,4.63,11.1,9100.0,4.1,1.0,1
70.0,1.01,0.0,0.0,1.0,20.0,0.7,137.53,4.63,12.53,8406.0,4.71,0.0,1
100.0,1.01,0.0,0.0,1.0,29.0,1.0,139.0,4.2,9.7,9200.0,4.5,1.0,1
80.0,1.01,1.0,0.0,0.0,202.0,10.8,134.0,3.4,7.9,7900.0,3.1,0.0,1
80.0,1.01,3.0,0.0,0.0,77.0,6.3,134.0,4.8,9.7,8406.0,4.71,1.0,1
80.0,1.02,3.0,0.0,1.0,89.0,5.9,130.0,4.9,9.3,8406.0,4.71,1.0,1
70.0,1.015,0.0,0.0,1.0,24.0,1.2,142.0,4.2,12.4,6400.0,4.7,0.0,1
80.0,1.01,3.0,0.0,1.0,17.0,0.8,137.53,4.63,15.0,8600.0,4.71,0.0,1
70.0,1.005,0.0,0.0,1.0,32.0,0.9,125.0,4.0,10.0,18900.0,3.5,1.0,1
70.0,1.01,2.0,0.0,1.0,72.0,3.0,137.53,4.63,9.7,21600.0,3.5,1.0,1
60.0,1.02,1.0,0.0,1.0,114.0,3.25,142.0,4.3,8.6,11000.0,3.8,1.0,1
100.0,1.015,3.0,0.0,1.0,66.0,1.6,136.0,4.4,10.3,8406.0,4.71,1.0,1
90.0,1.015,0.0,0.0,1.0,38.0,2.2,137.53,4.63,10.9,4300.0,3.7,0.0,1
80.0,1.015,0.0,5.0,1.0,24.0,1.0,137.53,4.63,13.6,8500.0,4.7,1.0,1
80.0,1.01,2.0,2.0,1.0,57.0,3.4,136.0,4.2,13.0,9800.0,4.2,1.0,1
80.0,1.005,3.0,0.0,0.0,57.0,3.07,137.53,4.63,9.5,8406.0,4.71,0.0,1
70.0,1.015,3.0,4.0,1.0,164.0,9.7,131.0,4.4,10.2,11300.0,3.4,1.0,1
90.0,1.02,1.0,0.0,1.0,155.0,7.3,132.0,4.9,12.53,8406.0,4.71,1.0,1
80.0,1.02,2.0,0.0,0.0,142.0,4.6,138.0,5.8,10.5,7200.0,4.3,1.0,1
100.0,1.02,1.0,0.0,1.0,96.0,6.4,137.53,4.63,6.6,8406.0,4.71,1.0,1
90.0,1.02,1.0,0.0,1.0,66.0,3.2,138.0,6.6,12.53,8406.0,4.71,1.0,1
80.0,1.01,1.0,3.0,1.0,391.0,32.0,163.0,39.0,12.53,8406.0,4.71,0.0,1
60.0,1.02,3.0,0.0,1.0,15.0,0.6,138.0,4.0,11.0,7700.0,3.8,1.0,1
70.0,1.015,1.0,0.0,0.0,111.0,6.1,131.0,3.7,7.5,8406.0,4.71,0.0,1
80.0,1.01,0.0,0.0,1.0,57.0,3.07,137.53,4.63,9.8,8406.0,4.71,0.0,1
90.0,1.01,1.0,0.0,1.0,20.0,1.1,137.53,4.63,15.0,8406.0,4.71,0.0,1
70.0,1.02,2.0,0.0,0.0,55.0,1.6,131.0,4.8,12.53,8406.0,4.71,1.0,1
80.0,1.02,3.0,0.0,1.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.01,2.0,0.0,1.0,73.0,3.3,137.53,4.63,10.9,8406.0,4.71,0.0,1
70.0,1.015,0.0,4.0,1.0,20.0,1.1,137.53,4.63,15.6,6900.0,6.0,0.0,1
80.0,1.015,0.0,4.0,1.0,19.0,0.7,137.0,4.4,15.2,8300.0,5.2,1.0,1
60.0,1.01,1.0,0.0,1.0,92.0,3.3,141.0,4.0,9.8,14600.0,3.2,1.0,1
90.0,1.01,3.0,3.0,1.0,35.0,1.3,137.53,4.63,10.3,8406.0,4.71,1.0,1
100.0,1.015,2.0,0.0,0.0,107.0,6.7,132.0,4.4,4.8,6300.0,4.71,1.0,1
90.0,1.015,2.0,0.0,0.0,107.0,6.7,131.0,4.8,9.1,6400.0,3.4,1.0,1
76.0,1.015,1.0,0.0,1.0,16.0,0.7,138.0,3.2,8.1,8406.0,4.71,0.0,1
80.0,1.005,4.0,0.0,0.0,139.0,8.5,132.0,5.5,10.3,6200.0,4.0,0.0,1
70.0,1.01,1.0,0.0,1.0,48.0,3.2,137.0,5.0,11.9,7100.0,3.7,1.0,1
80.0,1.02,1.0,0.0,1.0,85.0,3.2,141.0,3.5,10.1,8406.0,4.71,1.0,1
80.0,1.01,1.0,0.0,1.0,55.0,1.8,137.53,4.63,13.5,11800.0,5.0,1.0,1
80.0,1.01,0.0,0.0,1.0,98.0,2.8,133.0,5.0,10.8,9400.0,3.8,1.0,1
90.0,1.02,1.0,0.0,1.0,45.0,2.4,128.0,4.4,8.3,5500.0,3.7,1.0,1
70.0,1.02,1.0,0.0,1.0,77.0,1.9,140.0,3.9,12.53,8406.0,4.71,1.0,1
70.0,1.015,1.0,0.0,1.0,19.0,1.0,134.0,3.6,12.53,8406.0,4.71,1.0,1
70.0,1.01,3.0,0.0,1.0,186.0,15.0,135.0,7.6,7.1,3800.0,2.1,1.0,1
70.0,1.015,2.0,0.0,1.0,46.0,1.5,137.53,4.63,9.9,8406.0,4.71,0.0,1
80.0,1.02,1.0,0.0,1.0,37.0,1.9,137.53,4.63,12.53,8406.0,4.71,0.0,1
100.0,1.005,1.0,0.0,1.0,47.0,2.9,137.53,4.63,11.1,5800.0,5.0,1.0,1
110.0,1.01,4.0,0.0,1.0,52.0,2.2,137.53,4.63,12.53,13200.0,4.7,1.0,1
70.0,1.02,0.0,0.0,1.0,32.0,1.4,139.0,4.7,12.53,8406.0,4.71,0.0,1
100.0,1.01,2.0,2.0,1.0,35.0,3.2,143.0,3.5,13.0,9800.0,4.2,1.0,1
70.0,1.015,4.0,1.0,0.0,26.0,1.7,136.0,3.8,16.1,12500.0,5.6,0.0,1
70.0,1.01,3.0,0.0,1.0,82.0,3.6,133.0,4.4,10.4,5600.0,3.6,1.0,1
100.0,1.01,3.0,2.0,0.0,90.0,5.6,140.0,2.9,9.2,7000.0,3.2,1.0,1
70.0,1.01,0.0,0.0,1.0,66.0,1.6,137.0,4.5,11.6,11900.0,3.9,0.0,1
90.0,1.015,1.0,0.0,1.0,25.0,1.1,131.0,3.7,12.53,8406.0,4.71,1.0,1
80.0,1.01,1.0,1.0,1.0,32.0,2.7,137.53,4.63,11.2,8406.0,4.71,0.0,1
60.0,1.015,1.0,0.0,1.0,51.0,2.2,132.0,3.8,10.0,9100.0,4.0,1.0,1
140.0,1.02,1.0,0.0,1.0,106.0,6.5,135.0,4.3,6.2,5800.0,2.3,1.0,1
180.0,1.02,0.0,4.0,1.0,24.0,1.2,139.0,3.9,11.2,10400.0,4.2,1.0,1
70.0,1.015,4.0,0.0,0.0,22.0,0.9,133.0,3.8,12.53,8406.0,4.71,0.0,1
90.0,1.015,2.0,0.0,1.0,80.0,4.4,139.0,5.7,11.3,10700.0,3.9,0.0,1
60.0,1.01,0.0,0.0,1.0,32.0,2.1,141.0,4.2,13.9,7000.0,4.71,0.0,1
70.0,1.015,2.0,0.0,1.0,217.0,10.2,137.53,4.63,10.2,12700.0,4.2,1.0,1
90.0,1.02,1.0,0.0,1.0,88.0,2.0,137.53,4.63,12.53,8406.0,4.71,1.0,1
80.0,1.015,0.0,0.0,1.0,32.0,11.5,139.0,4.0,14.1,6800.0,5.2,0.0,1
90.0,1.02,1.0,0.0,1.0,118.0,6.1,127.0,4.4,6.0,6500.0,4.71,1.0,1
100.0,1.015,1.0,4.0,1.0,53.0,2.8,139.0,4.5,11.2,13600.0,4.4,1.0,1
80.0,1.015,0.0,0.0,1.0,15.0,1.0,141.0,4.2,11.8,10200.0,4.2,0.0,1
70.0,1.02,1.0,0.0,1.0,50.1,1.9,137.53,4.63,11.7,8406.0,4.71,0.0,1
90.0,1.015,0.0,0.0,1.0,19.0,2.0,142.0,3.8,11.7,11400.0,4.7,0.0,1
80.0,1.01,3.0,3.0,1.0,71.0,4.4,128.0,5.4,10.0,9000.0,3.9,1.0,1
60.0,1.015,3.0,0.0,0.0,34.0,1.2,137.53,4.63,10.8,8406.0,4.71,0.0,1
90.0,1.015,0.0,2.0,1.0,57.0,3.07,137.53,4.63,12.53,9800.0,4.71,0.0,1
60.0,1.015,3.0,0.0,0.0,51.0,1.8,137.53,4.63,12.1,10300.0,4.71,0.0,1
80.0,1.01,0.0,0.0,1.0,28.0,0.9,137.53,4.63,12.4,5600.0,4.3,0.0,1
70.0,1.015,4.0,0.0,0.0,16.0,0.5,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.02,0.0,0.0,1.0,36.0,1.3,139.0,3.7,12.5,9800.0,4.4,0.0,1
70.0,1.01,3.0,0.0,1.0,25.0,1.2,137.53,4.63,11.4,8406.0,4.71,0.0,1
70.0,1.01,0.0,0.0,1.0,27.0,1.2,137.53,4.63,12.53,8406.0,4.71,0.0,1
90.0,1.025,1.0,3.0,1.0,40.0,2.2,137.0,5.3,12.6,8406.0,4.71,0.0,1
60.0,1.02,3.0,0.0,1.0,21.0,1.3,137.0,3.4,15.0,8406.0,4.71,1.0,1
70.0,1.02,1.0,0.0,1.0,219.0,12.2,130.0,3.8,6.0,8406.0,4.71,1.0,1
80.0,1.015,2.0,3.0,1.0,30.0,1.1,137.53,4.63,14.0,14900.0,4.71,0.0,1
100.0,1.015,0.0,0.0,1.0,98.0,2.5,137.53,4.63,9.1,5500.0,3.6,1.0,1
90.0,1.02,1.0,0.0,1.0,36.0,2.5,131.0,4.3,12.53,8406.0,4.71,1.0,1
90.0,1.015,0.0,0.0,1.0,125.0,4.0,136.0,4.6,12.0,8200.0,4.5,1.0,1
60.0,1.015,4.0,0.0,1.0,125.0,5.3,136.0,4.9,11.4,15200.0,4.3,1.0,1
90.0,1.015,4.0,3.0,1.0,166.0,5.6,133.0,47.0,8.1,5000.0,2.9,1.0,1
70.0,1.025,1.0,0.0,1.0,49.0,1.4,135.0,4.7,11.1,8406.0,4.71,1.0,1
90.0,1.01,2.0,0.0,1.0,208.0,9.2,134.0,4.8,8.2,16300.0,2.7,0.0,1
50.0,1.01,0.0,0.0,1.0,25.0,0.6,137.53,4.63,11.8,12400.0,4.71,0.0,1
76.0,1.02,1.0,0.0,1.0,176.0,13.8,136.0,4.5,8.6,13200.0,2.7,1.0,1
100.0,1.015,4.0,0.0,1.0,125.0,5.3,136.0,4.9,12.0,8400.0,8.0,1.0,1
100.0,1.01,1.0,0.0,1.0,57.0,16.9,138.0,5.2,10.8,10200.0,3.8,0.0,1
80.0,1.015,0.0,2.0,1.0,24.0,1.3,140.0,4.0,13.2,8406.0,4.71,0.0,1
90.0,1.02,1.0,0.0,1.0,68.0,2.8,146.0,6.3,9.3,8406.0,4.71,1.0,1
60.0,1.01,2.0,0.0,1.0,86.0,4.0,134.0,5.1,10.0,9200.0,4.71,1.0,1
76.0,1.01,1.0,0.0,1.0,51.0,1.6,142.0,3.5,12.53,8406.0,4.71,0.0,1
70.0,1.015,2.0,0.0,1.0,68.0,2.8,132.0,4.1,11.1,8406.0,4.71,1.0,1
70.0,1.01,0.0,4.0,1.0,40.0,1.2,142.0,5.6,12.53,8406.0,4.71,0.0,1
70.0,1.01,1.0,0.0,1.0,106.0,6.0,137.0,4.9,6.1,6500.0,4.71,1.0,1
90.0,1.02,1.0,0.0,1.0,145.0,7.1,135.0,5.3,12.53,8406.0,4.71,0.0,1
80.0,1.015,1.0,4.0,0.0,165.0,18.0,135.0,4.7,12.53,8406.0,4.71,0.0,1
90.0,1.01,2.0,0.0,0.0,53.0,2.3,136.0,5.2,11.1,10500.0,4.1,0.0,1
90.0,1.015,5.0,0.0,0.0,322.0,13.0,126.0,4.8,8.0,4200.0,3.3,1.0,1
100.0,1.01,1.0,3.0,0.0,23.0,1.0,139.0,4.0,12.53,8406.0,4.71,0.0,1
60.0,1.01,3.0,1.0,1.0,36.0,1.7,130.0,3.0,7.9,15200.0,3.0,1.0,1
60.0,1.02,1.0,0.0,1.0,26.0,48.1,137.53,4.63,12.53,8406.0,4.71,1.0,1
70.0,1.02,1.0,0.0,0.0,29.0,1.0,137.53,4.63,10.5,8406.0,4.71,1.0,1
60.0,1.025,3.0,0.0,1.0,27.0,0.9,137.53,4.63,12.3,6700.0,4.71,0.0,1
90.0,1.02,1.0,0.0,1.0,46.0,1.7,141.0,5.5,9.6,8406.0,4.71,1.0,1
70.0,1.01,0.0,0.0,1.0,20.0,0.8,133.0,3.5,10.9,8406.0,4.71,0.0,1
90.0,1.01,2.0,1.0,0.0,235.0,14.2,132.0,3.4,8.3,14600.0,2.9,1.0,1
90.0,1.005,4.0,3.0,0.0,132.0,16.4,140.0,4.2,8.4,8406.0,3.0,1.0,1
70.0,1.02,3.0,0.0,0.0,40.0,1.8,137.53,4.63,11.1,4700.0,4.71,0.0,1
90.0,1.015,2.0,0.0,1.0,76.0,3.3,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.025,3.0,0.0,1.0,42.0,1.7,136.0,4.7,12.6,7900.0,3.9,1.0,1
60.0,1.02,3.0,2.0,1.0,48.0,1.5,132.0,4.0,10.9,8406.0,4.71,1.0,1
80.0,1.01,1.0,0.0,0.0,35.0,1.3,122.0,3.5,10.4,10900.0,4.3,0.0,1
60.0,1.02,1.0,0.0,1.0,39.0,2.1,147.0,4.2,10.9,9400.0,2.4,1.0,1
76.0,1.015,3.0,0.0,0.0,57.0,3.07,137.53,4.63,14.3,10200.0,4.8,1.0,1
70.0,1.02,1.0,0.0,1.0,34.0,1.5,124.0,4.1,9.8,6000.0,4.71,0.0,1
80.0,1.01,0.0,0.0,1.0,40.0,2.0,140.0,4.1,9.0,8100.0,3.2,1.0,1
76.0,1.015,0.0,0.0,1.0,15.0,0.8,137.0,4.2,14.3,9500.0,5.4,0.0,1
80.0,1.02,0.0,2.0,1.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
60.0,1.02,1.0,0.0,1.0,44.0,3.9,127.0,4.3,12.53,8406.0,4.71,0.0,1
70.0,1.02,0.0,0.0,0.0,19.0,0.9,137.53,4.63,12.7,2200.0,4.71,0.0,1
70.0,1.015,4.0,4.0,1.0,28.0,1.5,137.53,4.63,11.0,6700.0,4.71,1.0,1
70.0,1.01,0.0,2.0,1.0,68.0,2.8,137.53,4.63,8.7,8406.0,4.71,1.0,1
70.0,1.015,2.0,5.0,1.0,41.0,1.7,131.0,3.9,12.5,9600.0,4.4,1.0,1
70.0,1.02,3.0,0.0,1.0,60.0,2.6,115.0,5.7,8.7,12800.0,3.1,1.0,1
80.0,1.01,1.0,2.0,1.0,113.0,2.9,130.0,2.5,10.6,12800.0,4.9,0.0,1
70.0,1.015,1.0,0.0,0.0,1.5,7.3,145.0,2.8,13.1,11200.0,4.71,0.0,1
70.0,1.02,1.0,0.0,1.0,146.0,7.5,141.0,4.7,11.0,8600.0,4.6,0.0,1
50.0,1.01,0.0,0.0,1.0,58.0,2.2,113.0,3.0,12.53,4200.0,3.4,1.0,1
90.0,1.01,4.0,0.0,1.0,40.0,1.7,125.0,3.5,8.3,12400.0,3.9,0.0,1
80.0,1.015,2.0,1.0,1.0,133.0,2.5,137.53,4.63,13.2,8406.0,4.71,0.0,1
90.0,1.02,2.0,0.0,0.0,153.0,2.7,139.0,4.3,9.8,9800.0,4.71,0.0,1
90.0,1.01,2.0,0.0,1.0,53.0,2.3,137.53,4.63,11.9,8406.0,4.71,0.0,1
90.0,1.01,1.0,4.0,0.0,56.0,1.9,137.53,4.63,10.3,8406.0,4.71,0.0,1
70.0,1.025,2.0,0.0,1.0,52.0,2.2,136.0,3.8,10.0,19100.0,3.7,0.0,1
80.0,1.02,0.0,0.0,1.0,23.0,0.8,140.0,4.1,11.3,8406.0,4.71,0.0,1
70.0,1.015,0.0,0.0,1.0,106.0,6.5,135.0,4.3,12.53,8406.0,4.71,0.0,1
60.0,1.015,3.0,2.0,1.0,137.0,3.3,133.0,4.5,11.3,5800.0,3.6,1.0,1
76.0,1.02,1.0,0.0,1.0,23.0,0.6,138.0,4.4,12.0,8406.0,4.71,0.0,1
50.0,1.02,4.0,0.0,1.0,46.0,1.0,135.0,3.8,12.53,8406.0,4.71,0.0,1
76.0,1.01,2.0,0.0,1.0,22.0,0.7,137.53,4.63,10.7,12300.0,4.71,0.0,1
76.0,1.02,1.0,0.0,1.0,66.0,2.5,142.0,3.6,12.2,8406.0,4.71,0.0,1
60.0,1.01,4.0,1.0,0.0,58.0,4.3,137.0,5.4,9.5,7500.0,3.4,1.0,1
60.0,1.01,4.0,0.0,0.0,67.0,1.0,135.0,4.9,9.9,16700.0,4.8,0.0,1
70.0,1.01,3.0,0.0,1.0,115.0,6.0,134.0,2.7,9.1,9200.0,3.4,1.0,1
110.0,1.015,0.0,0.0,1.0,16.0,0.9,137.53,4.63,12.53,8406.0,4.71,0.0,1
90.0,1.025,1.0,0.0,0.0,223.0,18.1,113.0,6.5,5.5,2600.0,2.8,1.0,1
70.0,1.01,2.0,0.0,1.0,49.0,1.2,137.53,4.63,12.53,8406.0,4.71,1.0,1
90.0,1.02,2.0,1.0,0.0,98.6,3.3,138.0,3.9,5.8,8406.0,4.71,1.0,1
100.0,1.01,3.0,0.0,0.0,158.0,11.8,122.0,3.2,8.1,9600.0,3.5,1.0,1
80.0,1.02,1.0,0.0,1.0,111.0,9.3,124.0,5.3,6.8,4300.0,3.0,1.0,1
100.0,1.02,4.0,2.0,1.0,40.0,3.2,137.0,4.7,11.2,26400.0,3.9,1.0,1
80.0,1.015,0.0,0.0,1.0,37.0,1.5,140.0,5.2,8.8,10700.0,3.2,1.0,1
90.0,1.025,1.0,0.0,1.0,89.0,3.0,140.0,4.1,12.0,7900.0,3.9,1.0,1
70.0,1.02,1.0,0.0,1.0,94.0,7.3,137.0,4.3,7.9,8406.0,4.71,1.0,1
60.0,1.02,1.0,0.0,1.0,74.0,2.9,135.0,5.9,8.0,8406.0,4.71,0.0,1
90.0,1.02,1.0,0.0,1.0,80.0,6.8,142.0,5.5,8.5,8406.0,4.71,1.0,1
90.0,1.01,4.0,2.0,1.0,82.0,13.5,145.0,6.3,8.8,8406.0,4.71,1.0,1
70.0,1.02,1.0,0.0,1.0,28.0,2.1,137.53,4.63,12.6,8406.0,4.71,1.0,1
70.0,1.01,1.0,0.0,1.0,96.0,3.9,135.0,4.0,13.8,8406.0,4.71,1.0,1
70.0,1.01,0.0,0.0,1.0,50.0,2.2,137.53,4.63,12.0,10400.0,4.6,1.0,1
80.0,1.02,1.0,0.0,1.0,37.0,1.5,137.53,4.63,12.3,6900.0,4.9,1.0,1
70.0,1.02,0.0,0.0,1.0,57.0,3.07,137.53,4.63,11.5,6900.0,4.71,0.0,1
100.0,1.015,4.0,2.0,1.0,132.0,12.8,135.0,5.7,7.3,9800.0,3.9,1.0,1
120.0,1.015,0.0,0.0,1.0,18.0,1.2,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.015,3.0,4.0,1.0,150.0,11.9,132.0,5.6,10.9,8800.0,3.4,1.0,1
80.0,1.01,3.0,1.0,1.0,73.0,3.9,137.0,4.9,10.9,7400.0,3.7,1.0,1
80.0,1.015,0.0,0.0,1.0,30.0,1.0,137.53,4.63,13.7,4900.0,5.2,0.0,1
76.0,1.01,3.0,0.0,1.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.01,0.0,0.0,1.0,15.0,3.07,137.53,4.63,12.8,8406.0,4.71,0.0,1
100.0,1.01,1.0,0.0,1.0,61.0,1.8,141.0,4.4,12.2,10500.0,4.3,0.0,1
90.0,1.015,0.0,0.0,1.0,19.0,0.8,137.53,4.63,11.8,7000.0,4.71,0.0,1
90.0,1.01,0.0,0.0,1.0,57.0,2.5,137.53,4.63,9.8,8000.0,3.3,1.0,1
80.0,1.01,0.0,0.0,1.0,57.0,3.07,137.53,4.63,11.9,8800.0,4.71,0.0,1
70.0,1.02,1.0,0.0,1.0,30.0,1.7,138.0,5.3,12.53,8406.0,4.71,1.0,1
60.0,1.02,1.0,0.0,1.0,68.0,1.8,137.53,4.63,12.53,8406.0,4.71,1.0,1
90.0,1.01,0.0,3.0,1.0,30.0,1.3,136.0,4.1,13.0,9200.0,4.6,1.0,1
60.0,1.02,0.0,0.0,1.0,28.0,2.2,138.0,3.8,12.53,8406.0,4.71,0.0,1
90.0,1.01,3.0,5.0,0.0,95.0,2.7,131.0,3.8,11.5,12000.0,4.5,1.0,1
100.0,1.015,4.0,2.0,0.0,54.0,7.2,140.0,4.6,7.9,7500.0,3.4,1.0,1
80.0,1.015,0.0,0.0,1.0,48.0,1.6,137.53,4.63,11.3,7200.0,3.8,1.0,1
70.0,1.02,1.0,0.0,1.0,52.0,2.5,137.53,4.63,12.53,8406.0,4.71,1.0,1
50.0,1.01,3.0,0.0,1.0,191.0,12.0,114.0,2.9,9.6,15700.0,3.8,0.0,1
60.0,1.01,2.0,0.0,1.0,17.0,1.7,130.0,4.3,12.53,9500.0,4.71,1.0,1
90.0,1.02,1.0,0.0,1.0,51.0,2.8,138.0,3.7,11.5,8406.0,4.71,1.0,1
90.0,1.015,1.0,0.0,0.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
100.0,1.015,2.0,0.0,1.0,20.0,1.6,146.0,4.5,12.53,8406.0,4.71,0.0,1
100.0,1.01,0.0,0.0,0.0,19.0,1.3,137.53,4.63,15.0,4100.0,5.2,1.0,1
70.0,1.01,2.0,0.0,1.0,93.0,2.3,137.53,4.63,7.9,5700.0,4.71,0.0,1
80.0,1.02,1.0,0.0,1.0,66.0,2.0,136.0,5.4,9.1,8406.0,4.71,1.0,1
70.0,1.015,2.0,2.0,1.0,53.0,2.2,137.53,4.63,12.7,9600.0,4.71,1.0,1
100.0,1.02,1.0,0.0,1.0,241.0,13.4,127.0,4.8,9.4,8406.0,4.71,1.0,1
90.0,1.015,2.0,0.0,1.0,50.0,1.6,137.0,4.1,11.9,8406.0,4.71,0.0,1
70.0,1.015,1.0,0.0,1.0,46.0,1.4,137.53,4.63,11.4,5000.0,4.1,1.0,1
70.0,1.015,1.0,0.0,1.0,45.0,1.5,140.0,3.3,10.4,4200.0,3.9,0.0,1
70.0,1.01,4.0,3.0,1.0,96.0,6.3,120.0,3.9,9.4,11500.0,3.3,1.0,1
90.0,1.02,2.0,1.0,1.0,48.0,2.4,138.0,2.9,13.4,11000.0,6.1,1.0,1
90.0,1.015,3.0,2.0,1.0,64.0,2.8,135.0,4.1,12.2,9800.0,4.6,1.0,1
100.0,1.02,1.0,0.0,1.0,79.0,5.3,135.0,6.3,6.3,7200.0,2.6,1.0,1
110.0,1.015,3.0,0.0,0.0,215.0,15.2,120.0,5.7,8.6,5000.0,2.5,1.0,1
90.0,1.025,1.0,0.0,1.0,18.0,1.2,140.0,4.2,12.53,8406.0,4.71,0.0,1
70.0,1.01,1.0,3.0,0.0,55.0,1.7,138.0,4.5,12.6,10200.0,4.1,1.0,1
90.0,1.01,4.0,1.0,1.0,309.0,13.3,124.0,6.5,3.1,5400.0,2.1,1.0,1
80.0,1.025,0.0,0.0,1.0,10.0,1.2,135.0,5.0,15.0,10400.0,4.5,0.0,0
80.0,1.025,0.0,0.0,1.0,36.0,1.0,150.0,4.6,17.0,9800.0,5.0,0.0,0
80.0,1.025,0.0,0.0,1.0,49.0,0.6,147.0,4.4,15.9,9100.0,4.7,0.0,0
80.0,1.025,0.0,0.0,1.0,17.0,1.2,135.0,4.7,15.4,6200.0,6.2,0.0,0
60.0,1.025,0.0,0.0,1.0,38.0,0.8,135.0,3.7,13.0,8300.0,5.2,0.0,0
80.0,1.025,0.0,0.0,1.0,27.0,1.2,144.0,3.9,13.6,9200.0,6.3,0.0,0
80.0,1.025,0.0,0.0,1.0,10.0,0.5,146.0,5.0,14.5,10700.0,5.1,0.0,0
60.0,1.02,0.0,0.0,1.0,36.0,0.7,135.0,3.7,14.0,9100.0,5.8,0.0,0
80.0,1.02,0.0,0.0,1.0,20.0,0.5,140.0,3.5,13.9,8400.0,5.5,0.0,0
80.0,1.02,0.0,0.0,1.0,31.0,1.2,135.0,5.0,16.1,4300.0,5.2,0.0,0
80.0,1.02,0.0,0.0,1.0,38.0,1.0,147.0,3.8,14.1,9400.0,5.3,0.0,0
80.0,1.02,0.0,0.0,1.0,32.0,1.2,139.0,3.9,17.0,5600.0,4.9,0.0,0
80.0,1.02,0.0,0.0,1.0,18.0,0.9,135.0,3.6,15.5,7200.0,5.4,0.0,0
80.0,1.02,0.0,0.0,1.0,46.0,1.2,137.0,5.0,16.2,8600.0,5.2,0.0,0
80.0,1.02,0.0,0.0,1.0,24.0,0.7,140.0,4.1,14.4,5000.0,4.5,0.0,0
80.0,1.02,0.0,0.0,1.0,40.0,0.6,150.0,4.5,14.2,10500.0,5.0,0.0,0
80.0,1.02,0.0,0.0,1.0,17.0,1.2,135.0,4.8,13.2,6800.0,5.3,0.0,0
80.0,1.025,0.0,0.0,1.0,33.0,0.9,146.0,3.9,13.9,9500.0,4.8,0.0,0
80.0,1.02,1.0,0.0,1.0,49.0,1.0,140.0,5.0,16.3,8500.0,4.9,0.0,0
80.0,1.025,0.0,0.0,1.0,19.0,1.2,142.0,4.9,15.0,6900.0,5.3,0.0,0
80.0,1.025,0.0,0.0,1.0,34.0,1.1,145.0,4.0,14.3,7200.0,5.0,0.0,0
80.0,1.025,0.0,0.0,1.0,25.0,0.5,144.0,4.8,13.8,9000.0,4.5,0.0,0
80.0,1.025,0.0,0.0,1.0,15.0,1.2,135.0,5.0,14.8,5600.0,5.5,0.0,0
80.0,1.02,0.0,0.0,1.0,35.0,0.9,140.0,4.1,12.53,8406.0,4.71,0.0,0
80.0,1.02,0.0,0.0,1.0,23.0,0.7,141.0,4.2,14.4,8406.0,4.71,0.0,0
80.0,1.02,0.0,0.0,1.0,22.0,1.2,139.0,4.6,16.5,4700.0,4.6,0.0,0
60.0,1.025,0.0,0.0,1.0,57.0,3.07,137.0,4.7,14.0,4500.0,5.5,0.0,0
60.0,1.025,0.0,0.0,1.0,46.0,1.0,135.0,5.0,15.7,6300.0,4.8,0.0,0
60.0,1.02,0.0,0.0,1.0,44.0,1.2,142.0,4.9,14.5,9400.0,6.4,0.0,0
70.0,1.025,0.0,0.0,1.0,23.0,0.6,140.0,4.7,16.3,5800.0,5.6,0.0,0
80.0,1.02,1.0,0.0,1.0,33.0,0.9,144.0,4.5,13.3,8100.0,5.2,0.0,0
80.0,1.025,0.0,0.0,1.0,50.0,1.2,147.0,5.0,15.5,9100.0,6.0,0.0,0
70.0,1.02,0.0,0.0,1.0,44.0,1.0,135.0,3.8,14.6,5500.0,4.8,0.0,0
70.0,1.02,0.0,0.0,1.0,57.0,3.07,137.53,4.63,16.4,10800.0,5.7,0.0,0
80.0,1.025,0.0,0.0,1.0,37.0,1.2,142.0,4.0,16.9,6700.0,6.0,0.0,0
70.0,1.02,0.0,0.0,1.0,19.0,0.7,135.0,3.9,16.0,5300.0,5.9,0.0,0
70.0,1.02,0.0,0.0,1.0,18.0,0.8,145.0,5.0,14.7,9800.0,6.0,0.0,0
70.0,1.025,0.0,0.0,1.0,22.0,0.6,137.0,3.8,13.4,8406.0,4.71,0.0,0
70.0,1.025,0.0,0.0,1.0,46.0,1.2,135.0,4.9,15.9,11000.0,5.1,0.37,0
70.0,1.02,0.0,0.0,1.0,32.0,0.9,143.0,4.7,16.6,7100.0,5.3,0.0,0
70.0,1.02,0.0,0.0,1.0,28.0,0.6,146.0,3.5,14.8,8400.0,5.9,0.0,0
80.0,1.025,0.0,0.0,1.0,44.0,1.0,140.0,4.9,14.9,7000.0,5.7,0.0,0
80.0,1.02,0.0,0.0,1.0,42.0,0.5,139.0,5.0,16.7,10200.0,5.0,0.0,0
76.0,1.02,0.0,0.0,1.0,19.0,1.2,150.0,4.8,14.9,4700.0,5.4,0.0,0
60.0,1.02,0.0,0.0,1.0,50.0,0.7,135.0,5.0,14.3,8300.0,5.8,0.0,0
70.0,1.02,1.0,0.0,1.0,25.0,0.9,150.0,3.6,15.0,9600.0,6.5,0.0,0
70.0,1.02,0.0,0.0,1.0,38.0,0.6,140.0,5.0,16.8,6300.0,5.9,0.0,0
60.0,1.025,0.0,0.0,1.0,26.0,1.0,146.0,4.9,15.8,7700.0,5.2,0.37,0
60.0,1.02,0.0,0.0,1.0,49.0,1.2,135.0,4.5,13.5,8600.0,4.9,0.0,0
60.0,1.02,0.0,0.0,1.0,48.0,0.5,150.0,3.5,15.1,11000.0,4.7,0.0,0
60.0,1.02,0.0,0.0,1.0,26.0,0.7,141.0,4.2,15.0,9200.0,5.8,0.0,0
60.0,1.025,0.0,0.0,1.0,33.0,0.9,147.0,4.5,16.9,7200.0,5.0,0.0,0
70.0,1.02,0.0,0.0,1.0,44.0,1.2,145.0,5.0,14.8,8406.0,4.71,0.0,0
70.0,1.02,0.0,0.0,1.0,26.0,1.1,137.53,4.63,17.0,6700.0,6.1,0.0,0
80.0,1.025,0.0,0.0,1.0,38.0,0.6,135.0,3.9,13.1,6200.0,4.5,0.0,0
80.0,1.02,0.0,0.0,1.0,25.0,0.8,138.0,5.0,17.1,9100.0,5.2,0.0,0
80.0,1.02,0.0,0.0,1.0,30.0,1.2,140.0,4.5,15.2,4300.0,5.7,0.0,0
60.0,1.02,0.0,0.0,1.0,17.0,0.5,150.0,3.5,13.6,7900.0,4.5,0.0,0
80.0,1.025,0.0,0.0,1.0,46.0,0.6,135.0,4.9,13.9,6900.0,4.9,0.0,0
60.0,1.02,0.0,0.0,1.0,25.0,1.2,139.0,5.0,17.2,8100.0,5.9,0.0,0
60.0,1.02,0.0,0.0,1.0,27.0,0.7,142.0,4.9,13.2,11000.0,5.4,0.0,0
60.0,1.025,0.0,0.0,1.0,18.0,1.1,147.0,4.7,13.7,7500.0,5.6,0.0,0
70.0,1.02,0.0,0.0,1.0,57.0,3.07,135.0,4.1,15.3,6300.0,6.1,0.0,0
80.0,1.02,0.0,0.0,1.0,28.0,0.9,142.0,4.8,17.3,8200.0,4.8,0.0,0
70.0,1.025,0.0,0.0,1.0,46.0,0.6,145.0,5.0,15.6,9400.0,4.7,0.0,0
70.0,1.025,0.0,0.0,1.0,57.0,3.07,137.53,4.63,13.8,7800.0,4.4,0.0,0
76.0,1.02,0.0,0.0,1.0,30.0,0.5,135.0,4.9,15.4,5000.0,5.2,0.0,0
70.0,1.02,0.0,0.0,1.0,48.0,1.2,139.0,4.3,15.0,8100.0,4.9,0.0,0
70.0,1.025,0.0,0.0,1.0,29.0,0.7,137.0,3.5,17.4,7000.0,5.3,0.0,0
60.0,1.02,0.0,0.0,1.0,15.0,1.1,135.0,4.4,12.53,8406.0,4.71,0.0,0
60.0,1.02,0.0,0.0,1.0,49.0,1.2,150.0,4.7,15.7,10400.0,6.2,0.0,0
60.0,1.02,0.0,0.0,1.0,39.0,1.0,144.0,3.5,13.9,9600.0,4.8,0.0,0
60.0,1.02,1.0,0.0,1.0,40.0,0.5,140.0,4.6,16.0,4500.0,4.9,0.0,0
80.0,1.025,0.0,0.0,1.0,30.0,1.1,143.0,5.0,15.9,7800.0,4.5,0.0,0
80.0,1.02,0.0,0.0,1.0,15.0,0.7,150.0,4.9,12.53,8406.0,4.71,0.0,0
80.0,1.02,0.0,0.0,1.0,50.0,1.2,140.0,3.5,14.0,6700.0,6.5,0.0,0
60.0,1.02,0.0,0.0,1.0,25.0,1.1,141.0,4.7,15.8,8300.0,5.2,0.0,0
60.0,1.025,0.0,0.0,1.0,31.0,0.8,150.0,4.6,13.4,10700.0,5.8,0.0,0
70.0,1.02,0.0,0.0,1.0,29.0,0.6,145.0,4.9,12.53,8600.0,6.5,0.0,0
60.0,1.025,0.0,0.0,1.0,25.0,0.9,146.0,3.5,14.1,7800.0,5.1,0.0,0
80.0,1.02,0.0,0.0,1.0,32.0,1.1,135.0,3.9,12.53,8406.0,4.71,0.0,0
70.0,1.025,0.0,0.0,1.0,39.0,0.7,147.0,4.7,13.5,6700.0,4.5,0.0,0
70.0,1.025,0.0,0.0,1.0,33.0,1.0,150.0,5.0,15.3,10500.0,6.1,0.0,0
80.0,1.02,0.0,0.0,1.0,46.0,1.2,142.0,4.0,17.7,4300.0,5.5,0.0,0
80.0,1.025,0.0,0.0,1.0,57.0,3.07,136.0,3.5,15.4,5600.0,4.5,0.0,0
60.0,1.02,0.0,0.0,1.0,45.0,0.5,139.0,4.8,14.2,10700.0,5.6,0.0,0
60.0,1.02,0.0,0.0,1.0,27.0,0.5,137.53,4.63,15.2,9200.0,5.2,0.0,0
70.0,1.025,0.0,0.0,1.0,40.0,0.9,141.0,4.9,14.0,7500.0,6.2,0.0,0
80.0,1.02,0.0,0.0,1.0,34.0,0.8,147.0,3.5,17.8,4700.0,4.5,0.0,0
70.0,1.02,0.0,0.0,1.0,42.0,0.5,136.0,3.5,13.3,7000.0,4.9,0.0,0
70.0,1.025,0.0,0.0,1.0,29.0,1.1,142.0,4.5,14.3,6700.0,5.9,0.0,0
70.0,1.025,0.0,0.0,1.0,37.0,0.9,150.0,5.0,13.4,7300.0,4.7,0.0,0
60.0,1.02,0.0,0.0,1.0,46.0,0.5,138.0,4.2,15.0,7700.0,6.3,0.0,0
60.0,1.025,0.0,0.0,1.0,35.0,0.8,135.0,4.1,16.2,5500.0,5.7,0.0,0
60.0,1.02,0.0,0.0,1.0,27.0,0.7,150.0,3.3,14.4,8100.0,4.7,0.0,0
60.0,1.025,0.0,0.0,1.0,18.0,1.2,138.0,4.3,13.5,7900.0,6.4,0.0,0
60.0,1.02,1.0,0.0,1.0,41.0,0.9,141.0,4.4,15.5,4300.0,5.8,0.0,0
60.0,1.025,0.0,0.0,1.0,25.0,1.0,144.0,5.0,17.8,7200.0,5.5,0.0,0
80.0,1.02,0.0,0.0,1.0,19.0,0.5,147.0,3.5,13.6,7300.0,6.4,0.0,0
70.0,1.025,0.0,0.0,1.0,36.0,1.1,150.0,3.5,14.5,9400.0,6.1,0.0,0
70.0,1.025,0.0,0.0,1.0,20.0,1.0,142.0,4.8,16.1,9600.0,4.5,0.0,0
80.0,1.02,0.0,0.0,1.0,49.0,0.9,139.0,3.3,17.5,9900.0,4.7,0.0,0
60.0,1.02,0.0,0.0,1.0,47.0,1.1,141.0,4.9,15.0,7000.0,5.2,0.0,0
60.0,1.02,0.0,0.0,1.0,37.0,0.6,150.0,5.0,13.6,5800.0,4.5,0.0,0
60.0,1.025,0.0,0.0,1.0,17.0,0.4,147.0,4.7,14.6,6800.0,5.1,0.0,0
60.0,1.02,0.0,0.0,1.0,24.0,0.8,145.0,5.0,15.0,6300.0,4.6,0.0,0
70.0,1.025,0.0,0.0,1.0,38.0,0.5,144.0,4.8,17.1,7400.0,6.1,0.0,0
70.0,1.025,0.0,0.0,1.0,16.0,1.1,140.0,3.6,13.6,11000.0,4.9,0.0,0
60.0,1.02,0.0,0.0,1.0,22.0,1.2,138.0,3.5,13.0,5200.0,5.6,0.0,0
60.0,1.02,0.0,0.0,1.0,50.0,0.6,147.0,3.7,17.2,6000.0,4.5,0.0,0
60.0,1.025,0.0,0.0,1.0,39.0,0.5,135.0,3.9,14.7,5800.0,6.2,0.0,0
80.0,1.02,0.0,0.0,1.0,16.0,0.7,138.0,3.5,13.7,5400.0,5.8,0.0,0
80.0,1.025,0.0,0.0,1.0,19.0,1.1,144.0,5.0,15.0,10300.0,4.8,0.0,0
80.0,1.025,0.0,0.0,1.0,40.0,0.5,137.53,4.63,17.8,5900.0,5.2,0.0,0
80.0,1.025,0.0,0.0,1.0,44.0,0.7,137.0,3.5,14.8,9300.0,4.7,0.0,0
80.0,1.02,0.0,0.0,1.0,46.0,1.0,145.0,3.5,12.53,10700.0,6.3,0.0,0
80.0,1.025,0.0,0.0,1.0,15.0,0.5,141.0,3.6,15.0,10500.0,5.3,0.0,0
60.0,1.025,0.0,0.0,1.0,41.0,1.1,139.0,3.8,17.4,6700.0,6.1,0.0,0
80.0,1.025,0.0,0.0,1.0,42.0,0.7,146.0,5.0,14.9,9400.0,5.9,0.0,0
70.0,1.02,0.0,0.0,1.0,48.0,0.8,144.0,3.5,13.6,10300.0,4.8,0.0,0
70.0,1.02,0.0,0.0,1.0,42.0,1.2,139.0,3.7,16.2,9300.0,5.4,0.0,0
60.0,1.025,0.0,0.0,1.0,50.0,0.5,145.0,5.0,17.6,6500.0,5.0,0.0,0
60.0,1.02,0.0,0.0,1.0,26.0,0.9,150.0,4.9,15.0,10500.0,5.5,0.0,0
70.0,1.025,0.0,0.0,1.0,38.0,1.0,142.0,3.6,13.7,9200.0,4.9,0.0,0
80.0,1.025,0.0,0.0,1.0,44.0,1.2,146.0,3.6,16.3,8000.0,6.4,0.0,0
80.0,1.02,0.0,0.0,1.0,41.0,0.5,143.0,4.5,15.1,9700.0,5.6,0.0,0
70.0,1.025,0.0,0.0,1.0,16.0,1.1,147.0,3.5,16.4,9100.0,5.2,0.0,0
70.0,1.02,0.0,0.0,1.0,27.0,0.7,145.0,4.8,13.8,6400.0,4.8,0.0,0
60.0,1.025,0.0,0.0,1.0,57.0,0.9,140.0,4.8,15.2,7700.0,5.5,0.0,0
80.0,1.025,0.0,0.0,1.0,45.0,0.6,138.0,3.5,16.1,5400.0,5.7,0.0,0
60.0,1.02,0.0,0.0,1.0,23.0,1.1,139.0,3.5,15.3,6500.0,4.9,0.0,0
70.0,1.025,0.0,0.0,1.0,47.0,0.5,142.0,4.8,16.6,5800.0,5.9,0.0,0
80.0,1.025,0.0,0.0,1.0,22.0,0.8,137.0,5.0,16.8,6000.0,6.5,0.0,0
80.0,1.025,0.0,0.0,1.0,46.0,0.7,141.0,4.9,13.9,5100.0,5.0,0.0,0
60.0,1.02,0.0,0.0,1.0,18.0,1.1,150.0,4.7,15.4,11000.0,4.5,0.0,0
70.0,1.02,0.0,0.0,1.0,25.0,0.6,146.0,4.9,16.5,8000.0,5.1,0.0,0
70.0,1.025,0.0,0.0,1.0,47.0,0.5,142.0,3.5,16.4,5700.0,6.5,0.0,0
80.0,1.025,0.0,0.0,1.0,17.0,0.9,136.0,3.9,16.7,6200.0,5.2,0.0,0
80.0,1.02,0.0,0.0,1.0,15.0,1.2,144.0,3.7,15.5,9500.0,6.4,0.0,0
80.0,1.025,0.0,0.0,1.0,48.0,0.7,140.0,5.0,17.0,7200.0,5.8,0.0,0
80.0,1.025,0.0,0.0,1.0,25.0,0.8,135.0,3.7,15.0,6300.0,5.3,0.0,0
80.0,1.025,0.0,0.0,1.0,16.0,1.1,142.0,4.1,15.6,5800.0,6.3,0.0,0
80.0,1.02,0.0,0.0,1.0,48.0,1.2,147.0,4.3,14.8,6600.0,5.5,0.0,0
60.0,1.025,0.0,0.0,1.0,45.0,0.7,141.0,4.4,13.0,7400.0,5.4,0.0,0
80.0,1.02,0.0,0.0,1.0,46.0,0.8,139.0,5.0,14.1,9500.0,4.6,0.0,0
80.0,1.02,0.0,0.0,1.0,49.0,0.5,150.0,4.9,15.7,6700.0,4.9,0.0,0
70.0,1.025,0.0,0.0,1.0,31.0,1.2,141.0,3.5,16.5,7800.0,6.2,0.0,0
80.0,1.02,0.0,0.0,1.0,26.0,0.6,137.0,4.4,15.8,6600.0,5.4,0.0,0
60.0,1.025,0.0,0.0,1.0,50.0,1.0,135.0,4.9,14.2,7200.0,5.9,0.0,0
80.0,1.025,0.0,0.0,1.0,18.0,1.1,141.0,3.5,15.8,6800.0,6.1,0.0,0
Bp,Sg,Al,Su,Rbc,Bu,Sc,Sod,Pot,Hemo,Wbcc,Rbcc,Htn,Class
80.0,1.02,1.0,0.0,1.0,36.0,1.2,137.53,4.63,15.4,7800.0,5.2,1.0,1
50.0,1.02,4.0,0.0,1.0,18.0,0.8,137.53,4.63,11.3,6000.0,4.71,0.0,1
80.0,1.01,2.0,3.0,1.0,53.0,1.8,137.53,4.63,9.6,7500.0,4.71,0.0,1
70.0,1.005,4.0,0.0,1.0,56.0,3.8,111.0,2.5,11.2,6700.0,3.9,1.0,1
80.0,1.01,2.0,0.0,1.0,26.0,1.4,137.53,4.63,11.6,7300.0,4.6,0.0,1
90.0,1.015,3.0,0.0,1.0,25.0,1.1,142.0,3.2,12.2,7800.0,4.4,1.0,1
70.0,1.01,0.0,0.0,1.0,54.0,24.0,104.0,4.0,12.4,8406.0,4.71,0.0,1
76.0,1.015,2.0,4.0,1.0,31.0,1.1,137.53,4.63,12.4,6900.0,5.0,0.0,1
100.0,1.015,3.0,0.0,1.0,60.0,1.9,137.53,4.63,10.8,9600.0,4.0,1.0,1
90.0,1.02,2.0,0.0,0.0,107.0,7.2,114.0,3.7,9.5,12100.0,3.7,1.0,1
60.0,1.01,2.0,4.0,1.0,55.0,4.0,137.53,4.63,9.4,8406.0,4.71,1.0,1
70.0,1.01,3.0,0.0,0.0,60.0,2.7,131.0,4.2,10.8,4500.0,3.8,1.0,1
70.0,1.015,3.0,1.0,1.0,72.0,2.1,138.0,5.8,9.7,12200.0,3.4,1.0,1
70.0,1.02,1.0,0.0,1.0,86.0,4.6,135.0,3.4,9.8,8406.0,4.71,1.0,1
80.0,1.01,3.0,2.0,1.0,90.0,4.1,130.0,6.4,5.6,11000.0,2.6,1.0,1
80.0,1.015,3.0,0.0,1.0,162.0,9.6,141.0,4.9,7.6,3800.0,2.8,1.0,1
70.0,1.015,2.0,0.0,1.0,46.0,2.2,138.0,4.1,12.6,8406.0,4.71,0.0,1
80.0,1.02,1.0,0.0,1.0,87.0,5.2,139.0,3.7,12.1,8406.0,4.71,1.0,1
100.0,1.025,0.0,3.0,1.0,27.0,1.3,135.0,4.3,12.7,11400.0,4.3,1.0,1
60.0,1.015,1.0,0.0,1.0,31.0,1.6,137.53,4.63,10.3,5300.0,3.7,1.0,1
80.0,1.015,2.0,0.0,0.0,148.0,3.9,135.0,5.2,7.7,9200.0,3.2,1.0,1
90.0,1.02,1.0,0.0,1.0,180.0,76.0,4.5,4.63,10.9,6200.0,3.6,1.0,1
80.0,1.025,4.0,0.0,1.0,163.0,7.7,136.0,3.8,9.8,6900.0,3.4,1.0,1
70.0,1.01,0.0,0.0,1.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
100.0,1.015,4.0,0.0,1.0,50.0,1.4,129.0,4.0,11.1,8300.0,4.6,1.0,1
60.0,1.025,0.0,0.0,1.0,75.0,1.9,141.0,5.2,9.9,8400.0,3.7,1.0,1
80.0,1.015,0.0,0.0,1.0,45.0,2.4,140.0,3.4,11.6,10300.0,4.0,1.0,1
70.0,1.01,3.0,4.0,1.0,87.0,2.7,130.0,4.0,12.5,9600.0,4.1,1.0,1
70.0,1.02,1.0,3.0,1.0,31.0,1.4,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.005,1.0,0.0,0.0,28.0,1.4,137.53,4.63,12.9,8406.0,4.71,0.0,1
70.0,1.02,1.0,0.0,1.0,155.0,7.3,132.0,4.9,12.53,8406.0,4.71,1.0,1
90.0,1.015,3.0,0.0,1.0,33.0,1.5,141.0,4.6,10.1,7800.0,4.0,0.0,1
90.0,1.01,1.0,1.0,1.0,39.0,1.5,133.0,4.9,11.3,9600.0,4.0,1.0,1
100.0,1.02,2.0,0.0,0.0,55.0,2.5,137.53,4.63,10.1,8406.0,4.71,1.0,1
70.0,1.01,1.0,0.0,1.0,153.0,5.2,137.53,4.63,12.53,8406.0,4.71,0.0,1
90.0,1.02,2.0,1.0,0.0,39.0,2.0,137.53,4.63,12.0,9800.0,4.9,1.0,1
70.0,1.015,1.0,0.0,1.0,29.0,1.8,133.0,3.9,10.3,8406.0,4.71,1.0,1
80.0,1.02,1.0,0.0,1.0,65.0,3.4,141.0,4.7,9.7,6900.0,2.5,1.0,1
80.0,1.02,3.0,0.0,0.0,103.0,4.1,132.0,5.9,12.5,8406.0,4.71,1.0,1
80.0,1.01,2.0,2.0,1.0,70.0,3.4,136.0,4.2,13.0,9800.0,4.2,1.0,1
90.0,1.01,2.0,0.0,1.0,80.0,2.1,137.53,4.63,11.1,9100.0,4.1,1.0,1
70.0,1.01,0.0,0.0,1.0,20.0,0.7,137.53,4.63,12.53,8406.0,4.71,0.0,1
100.0,1.01,0.0,0.0,1.0,29.0,1.0,139.0,4.2,9.7,9200.0,4.5,1.0,1
80.0,1.01,1.0,0.0,0.0,202.0,10.8,134.0,3.4,7.9,7900.0,3.1,0.0,1
80.0,1.01,3.0,0.0,0.0,77.0,6.3,134.0,4.8,9.7,8406.0,4.71,1.0,1
80.0,1.02,3.0,0.0,1.0,89.0,5.9,130.0,4.9,9.3,8406.0,4.71,1.0,1
70.0,1.015,0.0,0.0,1.0,24.0,1.2,142.0,4.2,12.4,6400.0,4.7,0.0,1
80.0,1.01,3.0,0.0,1.0,17.0,0.8,137.53,4.63,15.0,8600.0,4.71,0.0,1
70.0,1.005,0.0,0.0,1.0,32.0,0.9,125.0,4.0,10.0,18900.0,3.5,1.0,1
70.0,1.01,2.0,0.0,1.0,72.0,3.0,137.53,4.63,9.7,21600.0,3.5,1.0,1
60.0,1.02,1.0,0.0,1.0,114.0,3.25,142.0,4.3,8.6,11000.0,3.8,1.0,1
100.0,1.015,3.0,0.0,1.0,66.0,1.6,136.0,4.4,10.3,8406.0,4.71,1.0,1
90.0,1.015,0.0,0.0,1.0,38.0,2.2,137.53,4.63,10.9,4300.0,3.7,0.0,1
80.0,1.015,0.0,5.0,1.0,24.0,1.0,137.53,4.63,13.6,8500.0,4.7,1.0,1
80.0,1.01,2.0,2.0,1.0,57.0,3.4,136.0,4.2,13.0,9800.0,4.2,1.0,1
80.0,1.005,3.0,0.0,0.0,57.0,3.07,137.53,4.63,9.5,8406.0,4.71,0.0,1
70.0,1.015,3.0,4.0,1.0,164.0,9.7,131.0,4.4,10.2,11300.0,3.4,1.0,1
90.0,1.02,1.0,0.0,1.0,155.0,7.3,132.0,4.9,12.53,8406.0,4.71,1.0,1
80.0,1.02,2.0,0.0,0.0,142.0,4.6,138.0,5.8,10.5,7200.0,4.3,1.0,1
100.0,1.02,1.0,0.0,1.0,96.0,6.4,137.53,4.63,6.6,8406.0,4.71,1.0,1
90.0,1.02,1.0,0.0,1.0,66.0,3.2,138.0,6.6,12.53,8406.0,4.71,1.0,1
80.0,1.01,1.0,3.0,1.0,391.0,32.0,163.0,39.0,12.53,8406.0,4.71,0.0,1
60.0,1.02,3.0,0.0,1.0,15.0,0.6,138.0,4.0,11.0,7700.0,3.8,1.0,1
70.0,1.015,1.0,0.0,0.0,111.0,6.1,131.0,3.7,7.5,8406.0,4.71,0.0,1
80.0,1.01,0.0,0.0,1.0,57.0,3.07,137.53,4.63,9.8,8406.0,4.71,0.0,1
90.0,1.01,1.0,0.0,1.0,20.0,1.1,137.53,4.63,15.0,8406.0,4.71,0.0,1
70.0,1.02,2.0,0.0,0.0,55.0,1.6,131.0,4.8,12.53,8406.0,4.71,1.0,1
80.0,1.02,3.0,0.0,1.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.01,2.0,0.0,1.0,73.0,3.3,137.53,4.63,10.9,8406.0,4.71,0.0,1
70.0,1.015,0.0,4.0,1.0,20.0,1.1,137.53,4.63,15.6,6900.0,6.0,0.0,1
80.0,1.015,0.0,4.0,1.0,19.0,0.7,137.0,4.4,15.2,8300.0,5.2,1.0,1
60.0,1.01,1.0,0.0,1.0,92.0,3.3,141.0,4.0,9.8,14600.0,3.2,1.0,1
90.0,1.01,3.0,3.0,1.0,35.0,1.3,137.53,4.63,10.3,8406.0,4.71,1.0,1
100.0,1.015,2.0,0.0,0.0,107.0,6.7,132.0,4.4,4.8,6300.0,4.71,1.0,1
90.0,1.015,2.0,0.0,0.0,107.0,6.7,131.0,4.8,9.1,6400.0,3.4,1.0,1
76.0,1.015,1.0,0.0,1.0,16.0,0.7,138.0,3.2,8.1,8406.0,4.71,0.0,1
80.0,1.005,4.0,0.0,0.0,139.0,8.5,132.0,5.5,10.3,6200.0,4.0,0.0,1
70.0,1.01,1.0,0.0,1.0,48.0,3.2,137.0,5.0,11.9,7100.0,3.7,1.0,1
80.0,1.02,1.0,0.0,1.0,85.0,3.2,141.0,3.5,10.1,8406.0,4.71,1.0,1
80.0,1.01,1.0,0.0,1.0,55.0,1.8,137.53,4.63,13.5,11800.0,5.0,1.0,1
80.0,1.01,0.0,0.0,1.0,98.0,2.8,133.0,5.0,10.8,9400.0,3.8,1.0,1
90.0,1.02,1.0,0.0,1.0,45.0,2.4,128.0,4.4,8.3,5500.0,3.7,1.0,1
70.0,1.02,1.0,0.0,1.0,77.0,1.9,140.0,3.9,12.53,8406.0,4.71,1.0,1
70.0,1.015,1.0,0.0,1.0,19.0,1.0,134.0,3.6,12.53,8406.0,4.71,1.0,1
70.0,1.01,3.0,0.0,1.0,186.0,15.0,135.0,7.6,7.1,3800.0,2.1,1.0,1
70.0,1.015,2.0,0.0,1.0,46.0,1.5,137.53,4.63,9.9,8406.0,4.71,0.0,1
80.0,1.02,1.0,0.0,1.0,37.0,1.9,137.53,4.63,12.53,8406.0,4.71,0.0,1
100.0,1.005,1.0,0.0,1.0,47.0,2.9,137.53,4.63,11.1,5800.0,5.0,1.0,1
110.0,1.01,4.0,0.0,1.0,52.0,2.2,137.53,4.63,12.53,13200.0,4.7,1.0,1
70.0,1.02,0.0,0.0,1.0,32.0,1.4,139.0,4.7,12.53,8406.0,4.71,0.0,1
100.0,1.01,2.0,2.0,1.0,35.0,3.2,143.0,3.5,13.0,9800.0,4.2,1.0,1
70.0,1.015,4.0,1.0,0.0,26.0,1.7,136.0,3.8,16.1,12500.0,5.6,0.0,1
70.0,1.01,3.0,0.0,1.0,82.0,3.6,133.0,4.4,10.4,5600.0,3.6,1.0,1
100.0,1.01,3.0,2.0,0.0,90.0,5.6,140.0,2.9,9.2,7000.0,3.2,1.0,1
70.0,1.01,0.0,0.0,1.0,66.0,1.6,137.0,4.5,11.6,11900.0,3.9,0.0,1
90.0,1.015,1.0,0.0,1.0,25.0,1.1,131.0,3.7,12.53,8406.0,4.71,1.0,1
80.0,1.01,1.0,1.0,1.0,32.0,2.7,137.53,4.63,11.2,8406.0,4.71,0.0,1
60.0,1.015,1.0,0.0,1.0,51.0,2.2,132.0,3.8,10.0,9100.0,4.0,1.0,1
140.0,1.02,1.0,0.0,1.0,106.0,6.5,135.0,4.3,6.2,5800.0,2.3,1.0,1
180.0,1.02,0.0,4.0,1.0,24.0,1.2,139.0,3.9,11.2,10400.0,4.2,1.0,1
70.0,1.015,4.0,0.0,0.0,22.0,0.9,133.0,3.8,12.53,8406.0,4.71,0.0,1
90.0,1.015,2.0,0.0,1.0,80.0,4.4,139.0,5.7,11.3,10700.0,3.9,0.0,1
60.0,1.01,0.0,0.0,1.0,32.0,2.1,141.0,4.2,13.9,7000.0,4.71,0.0,1
70.0,1.015,2.0,0.0,1.0,217.0,10.2,137.53,4.63,10.2,12700.0,4.2,1.0,1
90.0,1.02,1.0,0.0,1.0,88.0,2.0,137.53,4.63,12.53,8406.0,4.71,1.0,1
80.0,1.015,0.0,0.0,1.0,32.0,11.5,139.0,4.0,14.1,6800.0,5.2,0.0,1
90.0,1.02,1.0,0.0,1.0,118.0,6.1,127.0,4.4,6.0,6500.0,4.71,1.0,1
100.0,1.015,1.0,4.0,1.0,53.0,2.8,139.0,4.5,11.2,13600.0,4.4,1.0,1
80.0,1.015,0.0,0.0,1.0,15.0,1.0,141.0,4.2,11.8,10200.0,4.2,0.0,1
70.0,1.02,1.0,0.0,1.0,50.1,1.9,137.53,4.63,11.7,8406.0,4.71,0.0,1
90.0,1.015,0.0,0.0,1.0,19.0,2.0,142.0,3.8,11.7,11400.0,4.7,0.0,1
80.0,1.01,3.0,3.0,1.0,71.0,4.4,128.0,5.4,10.0,9000.0,3.9,1.0,1
60.0,1.015,3.0,0.0,0.0,34.0,1.2,137.53,4.63,10.8,8406.0,4.71,0.0,1
90.0,1.015,0.0,2.0,1.0,57.0,3.07,137.53,4.63,12.53,9800.0,4.71,0.0,1
60.0,1.015,3.0,0.0,0.0,51.0,1.8,137.53,4.63,12.1,10300.0,4.71,0.0,1
80.0,1.01,0.0,0.0,1.0,28.0,0.9,137.53,4.63,12.4,5600.0,4.3,0.0,1
70.0,1.015,4.0,0.0,0.0,16.0,0.5,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.02,0.0,0.0,1.0,36.0,1.3,139.0,3.7,12.5,9800.0,4.4,0.0,1
70.0,1.01,3.0,0.0,1.0,25.0,1.2,137.53,4.63,11.4,8406.0,4.71,0.0,1
70.0,1.01,0.0,0.0,1.0,27.0,1.2,137.53,4.63,12.53,8406.0,4.71,0.0,1
90.0,1.025,1.0,3.0,1.0,40.0,2.2,137.0,5.3,12.6,8406.0,4.71,0.0,1
60.0,1.02,3.0,0.0,1.0,21.0,1.3,137.0,3.4,15.0,8406.0,4.71,1.0,1
70.0,1.02,1.0,0.0,1.0,219.0,12.2,130.0,3.8,6.0,8406.0,4.71,1.0,1
80.0,1.015,2.0,3.0,1.0,30.0,1.1,137.53,4.63,14.0,14900.0,4.71,0.0,1
100.0,1.015,0.0,0.0,1.0,98.0,2.5,137.53,4.63,9.1,5500.0,3.6,1.0,1
90.0,1.02,1.0,0.0,1.0,36.0,2.5,131.0,4.3,12.53,8406.0,4.71,1.0,1
90.0,1.015,0.0,0.0,1.0,125.0,4.0,136.0,4.6,12.0,8200.0,4.5,1.0,1
60.0,1.015,4.0,0.0,1.0,125.0,5.3,136.0,4.9,11.4,15200.0,4.3,1.0,1
90.0,1.015,4.0,3.0,1.0,166.0,5.6,133.0,47.0,8.1,5000.0,2.9,1.0,1
70.0,1.025,1.0,0.0,1.0,49.0,1.4,135.0,4.7,11.1,8406.0,4.71,1.0,1
90.0,1.01,2.0,0.0,1.0,208.0,9.2,134.0,4.8,8.2,16300.0,2.7,0.0,1
50.0,1.01,0.0,0.0,1.0,25.0,0.6,137.53,4.63,11.8,12400.0,4.71,0.0,1
76.0,1.02,1.0,0.0,1.0,176.0,13.8,136.0,4.5,8.6,13200.0,2.7,1.0,1
100.0,1.015,4.0,0.0,1.0,125.0,5.3,136.0,4.9,12.0,8400.0,8.0,1.0,1
100.0,1.01,1.0,0.0,1.0,57.0,16.9,138.0,5.2,10.8,10200.0,3.8,0.0,1
80.0,1.015,0.0,2.0,1.0,24.0,1.3,140.0,4.0,13.2,8406.0,4.71,0.0,1
90.0,1.02,1.0,0.0,1.0,68.0,2.8,146.0,6.3,9.3,8406.0,4.71,1.0,1
60.0,1.01,2.0,0.0,1.0,86.0,4.0,134.0,5.1,10.0,9200.0,4.71,1.0,1
76.0,1.01,1.0,0.0,1.0,51.0,1.6,142.0,3.5,12.53,8406.0,4.71,0.0,1
70.0,1.015,2.0,0.0,1.0,68.0,2.8,132.0,4.1,11.1,8406.0,4.71,1.0,1
70.0,1.01,0.0,4.0,1.0,40.0,1.2,142.0,5.6,12.53,8406.0,4.71,0.0,1
70.0,1.01,1.0,0.0,1.0,106.0,6.0,137.0,4.9,6.1,6500.0,4.71,1.0,1
90.0,1.02,1.0,0.0,1.0,145.0,7.1,135.0,5.3,12.53,8406.0,4.71,0.0,1
80.0,1.015,1.0,4.0,0.0,165.0,18.0,135.0,4.7,12.53,8406.0,4.71,0.0,1
90.0,1.01,2.0,0.0,0.0,53.0,2.3,136.0,5.2,11.1,10500.0,4.1,0.0,1
90.0,1.015,5.0,0.0,0.0,322.0,13.0,126.0,4.8,8.0,4200.0,3.3,1.0,1
100.0,1.01,1.0,3.0,0.0,23.0,1.0,139.0,4.0,12.53,8406.0,4.71,0.0,1
60.0,1.01,3.0,1.0,1.0,36.0,1.7,130.0,3.0,7.9,15200.0,3.0,1.0,1
60.0,1.02,1.0,0.0,1.0,26.0,48.1,137.53,4.63,12.53,8406.0,4.71,1.0,1
70.0,1.02,1.0,0.0,0.0,29.0,1.0,137.53,4.63,10.5,8406.0,4.71,1.0,1
60.0,1.025,3.0,0.0,1.0,27.0,0.9,137.53,4.63,12.3,6700.0,4.71,0.0,1
90.0,1.02,1.0,0.0,1.0,46.0,1.7,141.0,5.5,9.6,8406.0,4.71,1.0,1
70.0,1.01,0.0,0.0,1.0,20.0,0.8,133.0,3.5,10.9,8406.0,4.71,0.0,1
90.0,1.01,2.0,1.0,0.0,235.0,14.2,132.0,3.4,8.3,14600.0,2.9,1.0,1
90.0,1.005,4.0,3.0,0.0,132.0,16.4,140.0,4.2,8.4,8406.0,3.0,1.0,1
70.0,1.02,3.0,0.0,0.0,40.0,1.8,137.53,4.63,11.1,4700.0,4.71,0.0,1
90.0,1.015,2.0,0.0,1.0,76.0,3.3,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.025,3.0,0.0,1.0,42.0,1.7,136.0,4.7,12.6,7900.0,3.9,1.0,1
60.0,1.02,3.0,2.0,1.0,48.0,1.5,132.0,4.0,10.9,8406.0,4.71,1.0,1
80.0,1.01,1.0,0.0,0.0,35.0,1.3,122.0,3.5,10.4,10900.0,4.3,0.0,1
60.0,1.02,1.0,0.0,1.0,39.0,2.1,147.0,4.2,10.9,9400.0,2.4,1.0,1
76.0,1.015,3.0,0.0,0.0,57.0,3.07,137.53,4.63,14.3,10200.0,4.8,1.0,1
70.0,1.02,1.0,0.0,1.0,34.0,1.5,124.0,4.1,9.8,6000.0,4.71,0.0,1
80.0,1.01,0.0,0.0,1.0,40.0,2.0,140.0,4.1,9.0,8100.0,3.2,1.0,1
76.0,1.015,0.0,0.0,1.0,15.0,0.8,137.0,4.2,14.3,9500.0,5.4,0.0,1
80.0,1.02,0.0,2.0,1.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
60.0,1.02,1.0,0.0,1.0,44.0,3.9,127.0,4.3,12.53,8406.0,4.71,0.0,1
70.0,1.02,0.0,0.0,0.0,19.0,0.9,137.53,4.63,12.7,2200.0,4.71,0.0,1
70.0,1.015,4.0,4.0,1.0,28.0,1.5,137.53,4.63,11.0,6700.0,4.71,1.0,1
70.0,1.01,0.0,2.0,1.0,68.0,2.8,137.53,4.63,8.7,8406.0,4.71,1.0,1
70.0,1.015,2.0,5.0,1.0,41.0,1.7,131.0,3.9,12.5,9600.0,4.4,1.0,1
70.0,1.02,3.0,0.0,1.0,60.0,2.6,115.0,5.7,8.7,12800.0,3.1,1.0,1
80.0,1.01,1.0,2.0,1.0,113.0,2.9,130.0,2.5,10.6,12800.0,4.9,0.0,1
70.0,1.015,1.0,0.0,0.0,1.5,7.3,145.0,2.8,13.1,11200.0,4.71,0.0,1
70.0,1.02,1.0,0.0,1.0,146.0,7.5,141.0,4.7,11.0,8600.0,4.6,0.0,1
50.0,1.01,0.0,0.0,1.0,58.0,2.2,113.0,3.0,12.53,4200.0,3.4,1.0,1
90.0,1.01,4.0,0.0,1.0,40.0,1.7,125.0,3.5,8.3,12400.0,3.9,0.0,1
80.0,1.015,2.0,1.0,1.0,133.0,2.5,137.53,4.63,13.2,8406.0,4.71,0.0,1
90.0,1.02,2.0,0.0,0.0,153.0,2.7,139.0,4.3,9.8,9800.0,4.71,0.0,1
90.0,1.01,2.0,0.0,1.0,53.0,2.3,137.53,4.63,11.9,8406.0,4.71,0.0,1
90.0,1.01,1.0,4.0,0.0,56.0,1.9,137.53,4.63,10.3,8406.0,4.71,0.0,1
70.0,1.025,2.0,0.0,1.0,52.0,2.2,136.0,3.8,10.0,19100.0,3.7,0.0,1
80.0,1.02,0.0,0.0,1.0,23.0,0.8,140.0,4.1,11.3,8406.0,4.71,0.0,1
70.0,1.015,0.0,0.0,1.0,106.0,6.5,135.0,4.3,12.53,8406.0,4.71,0.0,1
60.0,1.015,3.0,2.0,1.0,137.0,3.3,133.0,4.5,11.3,5800.0,3.6,1.0,1
76.0,1.02,1.0,0.0,1.0,23.0,0.6,138.0,4.4,12.0,8406.0,4.71,0.0,1
50.0,1.02,4.0,0.0,1.0,46.0,1.0,135.0,3.8,12.53,8406.0,4.71,0.0,1
76.0,1.01,2.0,0.0,1.0,22.0,0.7,137.53,4.63,10.7,12300.0,4.71,0.0,1
76.0,1.02,1.0,0.0,1.0,66.0,2.5,142.0,3.6,12.2,8406.0,4.71,0.0,1
60.0,1.01,4.0,1.0,0.0,58.0,4.3,137.0,5.4,9.5,7500.0,3.4,1.0,1
60.0,1.01,4.0,0.0,0.0,67.0,1.0,135.0,4.9,9.9,16700.0,4.8,0.0,1
70.0,1.01,3.0,0.0,1.0,115.0,6.0,134.0,2.7,9.1,9200.0,3.4,1.0,1
110.0,1.015,0.0,0.0,1.0,16.0,0.9,137.53,4.63,12.53,8406.0,4.71,0.0,1
90.0,1.025,1.0,0.0,0.0,223.0,18.1,113.0,6.5,5.5,2600.0,2.8,1.0,1
70.0,1.01,2.0,0.0,1.0,49.0,1.2,137.53,4.63,12.53,8406.0,4.71,1.0,1
90.0,1.02,2.0,1.0,0.0,98.6,3.3,138.0,3.9,5.8,8406.0,4.71,1.0,1
100.0,1.01,3.0,0.0,0.0,158.0,11.8,122.0,3.2,8.1,9600.0,3.5,1.0,1
80.0,1.02,1.0,0.0,1.0,111.0,9.3,124.0,5.3,6.8,4300.0,3.0,1.0,1
100.0,1.02,4.0,2.0,1.0,40.0,3.2,137.0,4.7,11.2,26400.0,3.9,1.0,1
80.0,1.015,0.0,0.0,1.0,37.0,1.5,140.0,5.2,8.8,10700.0,3.2,1.0,1
90.0,1.025,1.0,0.0,1.0,89.0,3.0,140.0,4.1,12.0,7900.0,3.9,1.0,1
70.0,1.02,1.0,0.0,1.0,94.0,7.3,137.0,4.3,7.9,8406.0,4.71,1.0,1
60.0,1.02,1.0,0.0,1.0,74.0,2.9,135.0,5.9,8.0,8406.0,4.71,0.0,1
90.0,1.02,1.0,0.0,1.0,80.0,6.8,142.0,5.5,8.5,8406.0,4.71,1.0,1
90.0,1.01,4.0,2.0,1.0,82.0,13.5,145.0,6.3,8.8,8406.0,4.71,1.0,1
70.0,1.02,1.0,0.0,1.0,28.0,2.1,137.53,4.63,12.6,8406.0,4.71,1.0,1
70.0,1.01,1.0,0.0,1.0,96.0,3.9,135.0,4.0,13.8,8406.0,4.71,1.0,1
70.0,1.01,0.0,0.0,1.0,50.0,2.2,137.53,4.63,12.0,10400.0,4.6,1.0,1
80.0,1.02,1.0,0.0,1.0,37.0,1.5,137.53,4.63,12.3,6900.0,4.9,1.0,1
70.0,1.02,0.0,0.0,1.0,57.0,3.07,137.53,4.63,11.5,6900.0,4.71,0.0,1
100.0,1.015,4.0,2.0,1.0,132.0,12.8,135.0,5.7,7.3,9800.0,3.9,1.0,1
120.0,1.015,0.0,0.0,1.0,18.0,1.2,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.015,3.0,4.0,1.0,150.0,11.9,132.0,5.6,10.9,8800.0,3.4,1.0,1
80.0,1.01,3.0,1.0,1.0,73.0,3.9,137.0,4.9,10.9,7400.0,3.7,1.0,1
80.0,1.015,0.0,0.0,1.0,30.0,1.0,137.53,4.63,13.7,4900.0,5.2,0.0,1
76.0,1.01,3.0,0.0,1.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
70.0,1.01,0.0,0.0,1.0,15.0,3.07,137.53,4.63,12.8,8406.0,4.71,0.0,1
100.0,1.01,1.0,0.0,1.0,61.0,1.8,141.0,4.4,12.2,10500.0,4.3,0.0,1
90.0,1.015,0.0,0.0,1.0,19.0,0.8,137.53,4.63,11.8,7000.0,4.71,0.0,1
90.0,1.01,0.0,0.0,1.0,57.0,2.5,137.53,4.63,9.8,8000.0,3.3,1.0,1
80.0,1.01,0.0,0.0,1.0,57.0,3.07,137.53,4.63,11.9,8800.0,4.71,0.0,1
70.0,1.02,1.0,0.0,1.0,30.0,1.7,138.0,5.3,12.53,8406.0,4.71,1.0,1
60.0,1.02,1.0,0.0,1.0,68.0,1.8,137.53,4.63,12.53,8406.0,4.71,1.0,1
90.0,1.01,0.0,3.0,1.0,30.0,1.3,136.0,4.1,13.0,9200.0,4.6,1.0,1
60.0,1.02,0.0,0.0,1.0,28.0,2.2,138.0,3.8,12.53,8406.0,4.71,0.0,1
90.0,1.01,3.0,5.0,0.0,95.0,2.7,131.0,3.8,11.5,12000.0,4.5,1.0,1
100.0,1.015,4.0,2.0,0.0,54.0,7.2,140.0,4.6,7.9,7500.0,3.4,1.0,1
80.0,1.015,0.0,0.0,1.0,48.0,1.6,137.53,4.63,11.3,7200.0,3.8,1.0,1
70.0,1.02,1.0,0.0,1.0,52.0,2.5,137.53,4.63,12.53,8406.0,4.71,1.0,1
50.0,1.01,3.0,0.0,1.0,191.0,12.0,114.0,2.9,9.6,15700.0,3.8,0.0,1
60.0,1.01,2.0,0.0,1.0,17.0,1.7,130.0,4.3,12.53,9500.0,4.71,1.0,1
90.0,1.02,1.0,0.0,1.0,51.0,2.8,138.0,3.7,11.5,8406.0,4.71,1.0,1
90.0,1.015,1.0,0.0,0.0,57.0,3.07,137.53,4.63,12.53,8406.0,4.71,0.0,1
100.0,1.015,2.0,0.0,1.0,20.0,1.6,146.0,4.5,12.53,8406.0,4.71,0.0,1
100.0,1.01,0.0,0.0,0.0,19.0,1.3,137.53,4.63,15.0,4100.0,5.2,1.0,1
70.0,1.01,2.0,0.0,1.0,93.0,2.3,137.53,4.63,7.9,5700.0,4.71,0.0,1
80.0,1.02,1.0,0.0,1.0,66.0,2.0,136.0,5.4,9.1,8406.0,4.71,1.0,1
70.0,1.015,2.0,2.0,1.0,53.0,2.2,137.53,4.63,12.7,9600.0,4.71,1.0,1
100.0,1.02,1.0,0.0,1.0,241.0,13.4,127.0,4.8,9.4,8406.0,4.71,1.0,1
90.0,1.015,2.0,0.0,1.0,50.0,1.6,137.0,4.1,11.9,8406.0,4.71,0.0,1
70.0,1.015,1.0,0.0,1.0,46.0,1.4,137.53,4.63,11.4,5000.0,4.1,1.0,1
70.0,1.015,1.0,0.0,1.0,45.0,1.5,140.0,3.3,10.4,4200.0,3.9,0.0,1
70.0,1.01,4.0,3.0,1.0,96.0,6.3,120.0,3.9,9.4,11500.0,3.3,1.0,1
90.0,1.02,2.0,1.0,1.0,48.0,2.4,138.0,2.9,13.4,11000.0,6.1,1.0,1
90.0,1.015,3.0,2.0,1.0,64.0,2.8,135.0,4.1,12.2,9800.0,4.6,1.0,1
100.0,1.02,1.0,0.0,1.0,79.0,5.3,135.0,6.3,6.3,7200.0,2.6,1.0,1
110.0,1.015,3.0,0.0,0.0,215.0,15.2,120.0,5.7,8.6,5000.0,2.5,1.0,1
90.0,1.025,1.0,0.0,1.0,18.0,1.2,140.0,4.2,12.53,8406.0,4.71,0.0,1
70.0,1.01,1.0,3.0,0.0,55.0,1.7,138.0,4.5,12.6,10200.0,4.1,1.0,1
90.0,1.01,4.0,1.0,1.0,309.0,13.3,124.0,6.5,3.1,5400.0,2.1,1.0,1
80.0,1.025,0.0,0.0,1.0,10.0,1.2,135.0,5.0,15.0,10400.0,4.5,0.0,0
80.0,1.025,0.0,0.0,1.0,36.0,1.0,150.0,4.6,17.0,9800.0,5.0,0.0,0
80.0,1.025,0.0,0.0,1.0,49.0,0.6,147.0,4.4,15.9,9100.0,4.7,0.0,0
80.0,1.025,0.0,0.0,1.0,17.0,1.2,135.0,4.7,15.4,6200.0,6.2,0.0,0
60.0,1.025,0.0,0.0,1.0,38.0,0.8,135.0,3.7,13.0,8300.0,5.2,0.0,0
80.0,1.025,0.0,0.0,1.0,27.0,1.2,144.0,3.9,13.6,9200.0,6.3,0.0,0
80.0,1.025,0.0,0.0,1.0,10.0,0.5,146.0,5.0,14.5,10700.0,5.1,0.0,0
60.0,1.02,0.0,0.0,1.0,36.0,0.7,135.0,3.7,14.0,9100.0,5.8,0.0,0
80.0,1.02,0.0,0.0,1.0,20.0,0.5,140.0,3.5,13.9,8400.0,5.5,0.0,0
80.0,1.02,0.0,0.0,1.0,31.0,1.2,135.0,5.0,16.1,4300.0,5.2,0.0,0
80.0,1.02,0.0,0.0,1.0,38.0,1.0,147.0,3.8,14.1,9400.0,5.3,0.0,0
80.0,1.02,0.0,0.0,1.0,32.0,1.2,139.0,3.9,17.0,5600.0,4.9,0.0,0
80.0,1.02,0.0,0.0,1.0,18.0,0.9,135.0,3.6,15.5,7200.0,5.4,0.0,0
80.0,1.02,0.0,0.0,1.0,46.0,1.2,137.0,5.0,16.2,8600.0,5.2,0.0,0
80.0,1.02,0.0,0.0,1.0,24.0,0.7,140.0,4.1,14.4,5000.0,4.5,0.0,0
80.0,1.02,0.0,0.0,1.0,40.0,0.6,150.0,4.5,14.2,10500.0,5.0,0.0,0
80.0,1.02,0.0,0.0,1.0,17.0,1.2,135.0,4.8,13.2,6800.0,5.3,0.0,0
80.0,1.025,0.0,0.0,1.0,33.0,0.9,146.0,3.9,13.9,9500.0,4.8,0.0,0
80.0,1.02,1.0,0.0,1.0,49.0,1.0,140.0,5.0,16.3,8500.0,4.9,0.0,0
80.0,1.025,0.0,0.0,1.0,19.0,1.2,142.0,4.9,15.0,6900.0,5.3,0.0,0
80.0,1.025,0.0,0.0,1.0,34.0,1.1,145.0,4.0,14.3,7200.0,5.0,0.0,0
80.0,1.025,0.0,0.0,1.0,25.0,0.5,144.0,4.8,13.8,9000.0,4.5,0.0,0
80.0,1.025,0.0,0.0,1.0,15.0,1.2,135.0,5.0,14.8,5600.0,5.5,0.0,0
80.0,1.02,0.0,0.0,1.0,35.0,0.9,140.0,4.1,12.53,8406.0,4.71,0.0,0
80.0,1.02,0.0,0.0,1.0,23.0,0.7,141.0,4.2,14.4,8406.0,4.71,0.0,0
80.0,1.02,0.0,0.0,1.0,22.0,1.2,139.0,4.6,16.5,4700.0,4.6,0.0,0
60.0,1.025,0.0,0.0,1.0,57.0,3.07,137.0,4.7,14.0,4500.0,5.5,0.0,0
60.0,1.025,0.0,0.0,1.0,46.0,1.0,135.0,5.0,15.7,6300.0,4.8,0.0,0
60.0,1.02,0.0,0.0,1.0,44.0,1.2,142.0,4.9,14.5,9400.0,6.4,0.0,0
70.0,1.025,0.0,0.0,1.0,23.0,0.6,140.0,4.7,16.3,5800.0,5.6,0.0,0
80.0,1.02,1.0,0.0,1.0,33.0,0.9,144.0,4.5,13.3,8100.0,5.2,0.0,0
80.0,1.025,0.0,0.0,1.0,50.0,1.2,147.0,5.0,15.5,9100.0,6.0,0.0,0
70.0,1.02,0.0,0.0,1.0,44.0,1.0,135.0,3.8,14.6,5500.0,4.8,0.0,0
70.0,1.02,0.0,0.0,1.0,57.0,3.07,137.53,4.63,16.4,10800.0,5.7,0.0,0
80.0,1.025,0.0,0.0,1.0,37.0,1.2,142.0,4.0,16.9,6700.0,6.0,0.0,0
70.0,1.02,0.0,0.0,1.0,19.0,0.7,135.0,3.9,16.0,5300.0,5.9,0.0,0
70.0,1.02,0.0,0.0,1.0,18.0,0.8,145.0,5.0,14.7,9800.0,6.0,0.0,0
70.0,1.025,0.0,0.0,1.0,22.0,0.6,137.0,3.8,13.4,8406.0,4.71,0.0,0
70.0,1.025,0.0,0.0,1.0,46.0,1.2,135.0,4.9,15.9,11000.0,5.1,0.37,0
70.0,1.02,0.0,0.0,1.0,32.0,0.9,143.0,4.7,16.6,7100.0,5.3,0.0,0
70.0,1.02,0.0,0.0,1.0,28.0,0.6,146.0,3.5,14.8,8400.0,5.9,0.0,0
80.0,1.025,0.0,0.0,1.0,44.0,1.0,140.0,4.9,14.9,7000.0,5.7,0.0,0
80.0,1.02,0.0,0.0,1.0,42.0,0.5,139.0,5.0,16.7,10200.0,5.0,0.0,0
76.0,1.02,0.0,0.0,1.0,19.0,1.2,150.0,4.8,14.9,4700.0,5.4,0.0,0
60.0,1.02,0.0,0.0,1.0,50.0,0.7,135.0,5.0,14.3,8300.0,5.8,0.0,0
70.0,1.02,1.0,0.0,1.0,25.0,0.9,150.0,3.6,15.0,9600.0,6.5,0.0,0
70.0,1.02,0.0,0.0,1.0,38.0,0.6,140.0,5.0,16.8,6300.0,5.9,0.0,0
60.0,1.025,0.0,0.0,1.0,26.0,1.0,146.0,4.9,15.8,7700.0,5.2,0.37,0
60.0,1.02,0.0,0.0,1.0,49.0,1.2,135.0,4.5,13.5,8600.0,4.9,0.0,0
60.0,1.02,0.0,0.0,1.0,48.0,0.5,150.0,3.5,15.1,11000.0,4.7,0.0,0
60.0,1.02,0.0,0.0,1.0,26.0,0.7,141.0,4.2,15.0,9200.0,5.8,0.0,0
60.0,1.025,0.0,0.0,1.0,33.0,0.9,147.0,4.5,16.9,7200.0,5.0,0.0,0
70.0,1.02,0.0,0.0,1.0,44.0,1.2,145.0,5.0,14.8,8406.0,4.71,0.0,0
70.0,1.02,0.0,0.0,1.0,26.0,1.1,137.53,4.63,17.0,6700.0,6.1,0.0,0
80.0,1.025,0.0,0.0,1.0,38.0,0.6,135.0,3.9,13.1,6200.0,4.5,0.0,0
80.0,1.02,0.0,0.0,1.0,25.0,0.8,138.0,5.0,17.1,9100.0,5.2,0.0,0
80.0,1.02,0.0,0.0,1.0,30.0,1.2,140.0,4.5,15.2,4300.0,5.7,0.0,0
60.0,1.02,0.0,0.0,1.0,17.0,0.5,150.0,3.5,13.6,7900.0,4.5,0.0,0
80.0,1.025,0.0,0.0,1.0,46.0,0.6,135.0,4.9,13.9,6900.0,4.9,0.0,0
60.0,1.02,0.0,0.0,1.0,25.0,1.2,139.0,5.0,17.2,8100.0,5.9,0.0,0
60.0,1.02,0.0,0.0,1.0,27.0,0.7,142.0,4.9,13.2,11000.0,5.4,0.0,0
60.0,1.025,0.0,0.0,1.0,18.0,1.1,147.0,4.7,13.7,7500.0,5.6,0.0,0
70.0,1.02,0.0,0.0,1.0,57.0,3.07,135.0,4.1,15.3,6300.0,6.1,0.0,0
80.0,1.02,0.0,0.0,1.0,28.0,0.9,142.0,4.8,17.3,8200.0,4.8,0.0,0
70.0,1.025,0.0,0.0,1.0,46.0,0.6,145.0,5.0,15.6,9400.0,4.7,0.0,0
70.0,1.025,0.0,0.0,1.0,57.0,3.07,137.53,4.63,13.8,7800.0,4.4,0.0,0
76.0,1.02,0.0,0.0,1.0,30.0,0.5,135.0,4.9,15.4,5000.0,5.2,0.0,0
70.0,1.02,0.0,0.0,1.0,48.0,1.2,139.0,4.3,15.0,8100.0,4.9,0.0,0
70.0,1.025,0.0,0.0,1.0,29.0,0.7,137.0,3.5,17.4,7000.0,5.3,0.0,0
60.0,1.02,0.0,0.0,1.0,15.0,1.1,135.0,4.4,12.53,8406.0,4.71,0.0,0
60.0,1.02,0.0,0.0,1.0,49.0,1.2,150.0,4.7,15.7,10400.0,6.2,0.0,0
60.0,1.02,0.0,0.0,1.0,39.0,1.0,144.0,3.5,13.9,9600.0,4.8,0.0,0
60.0,1.02,1.0,0.0,1.0,40.0,0.5,140.0,4.6,16.0,4500.0,4.9,0.0,0
80.0,1.025,0.0,0.0,1.0,30.0,1.1,143.0,5.0,15.9,7800.0,4.5,0.0,0
80.0,1.02,0.0,0.0,1.0,15.0,0.7,150.0,4.9,12.53,8406.0,4.71,0.0,0
80.0,1.02,0.0,0.0,1.0,50.0,1.2,140.0,3.5,14.0,6700.0,6.5,0.0,0
60.0,1.02,0.0,0.0,1.0,25.0,1.1,141.0,4.7,15.8,8300.0,5.2,0.0,0
60.0,1.025,0.0,0.0,1.0,31.0,0.8,150.0,4.6,13.4,10700.0,5.8,0.0,0
70.0,1.02,0.0,0.0,1.0,29.0,0.6,145.0,4.9,12.53,8600.0,6.5,0.0,0
60.0,1.025,0.0,0.0,1.0,25.0,0.9,146.0,3.5,14.1,7800.0,5.1,0.0,0
80.0,1.02,0.0,0.0,1.0,32.0,1.1,135.0,3.9,12.53,8406.0,4.71,0.0,0
70.0,1.025,0.0,0.0,1.0,39.0,0.7,147.0,4.7,13.5,6700.0,4.5,0.0,0
70.0,1.025,0.0,0.0,1.0,33.0,1.0,150.0,5.0,15.3,10500.0,6.1,0.0,0
80.0,1.02,0.0,0.0,1.0,46.0,1.2,142.0,4.0,17.7,4300.0,5.5,0.0,0
80.0,1.025,0.0,0.0,1.0,57.0,3.07,136.0,3.5,15.4,5600.0,4.5,0.0,0
60.0,1.02,0.0,0.0,1.0,45.0,0.5,139.0,4.8,14.2,10700.0,5.6,0.0,0
60.0,1.02,0.0,0.0,1.0,27.0,0.5,137.53,4.63,15.2,9200.0,5.2,0.0,0
70.0,1.025,0.0,0.0,1.0,40.0,0.9,141.0,4.9,14.0,7500.0,6.2,0.0,0
80.0,1.02,0.0,0.0,1.0,34.0,0.8,147.0,3.5,17.8,4700.0,4.5,0.0,0
70.0,1.02,0.0,0.0,1.0,42.0,0.5,136.0,3.5,13.3,7000.0,4.9,0.0,0
70.0,1.025,0.0,0.0,1.0,29.0,1.1,142.0,4.5,14.3,6700.0,5.9,0.0,0
70.0,1.025,0.0,0.0,1.0,37.0,0.9,150.0,5.0,13.4,7300.0,4.7,0.0,0
60.0,1.02,0.0,0.0,1.0,46.0,0.5,138.0,4.2,15.0,7700.0,6.3,0.0,0
60.0,1.025,0.0,0.0,1.0,35.0,0.8,135.0,4.1,16.2,5500.0,5.7,0.0,0
60.0,1.02,0.0,0.0,1.0,27.0,0.7,150.0,3.3,14.4,8100.0,4.7,0.0,0
60.0,1.025,0.0,0.0,1.0,18.0,1.2,138.0,4.3,13.5,7900.0,6.4,0.0,0
60.0,1.02,1.0,0.0,1.0,41.0,0.9,141.0,4.4,15.5,4300.0,5.8,0.0,0
60.0,1.025,0.0,0.0,1.0,25.0,1.0,144.0,5.0,17.8,7200.0,5.5,0.0,0
80.0,1.02,0.0,0.0,1.0,19.0,0.5,147.0,3.5,13.6,7300.0,6.4,0.0,0
70.0,1.025,0.0,0.0,1.0,36.0,1.1,150.0,3.5,14.5,9400.0,6.1,0.0,0
70.0,1.025,0.0,0.0,1.0,20.0,1.0,142.0,4.8,16.1,9600.0,4.5,0.0,0
80.0,1.02,0.0,0.0,1.0,49.0,0.9,139.0,3.3,17.5,9900.0,4.7,0.0,0
60.0,1.02,0.0,0.0,1.0,47.0,1.1,141.0,4.9,15.0,7000.0,5.2,0.0,0
60.0,1.02,0.0,0.0,1.0,37.0,0.6,150.0,5.0,13.6,5800.0,4.5,0.0,0
60.0,1.025,0.0,0.0,1.0,17.0,0.4,147.0,4.7,14.6,6800.0,5.1,0.0,0
60.0,1.02,0.0,0.0,1.0,24.0,0.8,145.0,5.0,15.0,6300.0,4.6,0.0,0
70.0,1.025,0.0,0.0,1.0,38.0,0.5,144.0,4.8,17.1,7400.0,6.1,0.0,0
70.0,1.025,0.0,0.0,1.0,16.0,1.1,140.0,3.6,13.6,11000.0,4.9,0.0,0
60.0,1.02,0.0,0.0,1.0,22.0,1.2,138.0,3.5,13.0,5200.0,5.6,0.0,0
60.0,1.02,0.0,0.0,1.0,50.0,0.6,147.0,3.7,17.2,6000.0,4.5,0.0,0
60.0,1.025,0.0,0.0,1.0,39.0,0.5,135.0,3.9,14.7,5800.0,6.2,0.0,0
80.0,1.02,0.0,0.0,1.0,16.0,0.7,138.0,3.5,13.7,5400.0,5.8,0.0,0
80.0,1.025,0.0,0.0,1.0,19.0,1.1,144.0,5.0,15.0,10300.0,4.8,0.0,0
80.0,1.025,0.0,0.0,1.0,40.0,0.5,137.53,4.63,17.8,5900.0,5.2,0.0,0
80.0,1.025,0.0,0.0,1.0,44.0,0.7,137.0,3.5,14.8,9300.0,4.7,0.0,0
80.0,1.02,0.0,0.0,1.0,46.0,1.0,145.0,3.5,12.53,10700.0,6.3,0.0,0
80.0,1.025,0.0,0.0,1.0,15.0,0.5,141.0,3.6,15.0,10500.0,5.3,0.0,0
60.0,1.025,0.0,0.0,1.0,41.0,1.1,139.0,3.8,17.4,6700.0,6.1,0.0,0
80.0,1.025,0.0,0.0,1.0,42.0,0.7,146.0,5.0,14.9,9400.0,5.9,0.0,0
70.0,1.02,0.0,0.0,1.0,48.0,0.8,144.0,3.5,13.6,10300.0,4.8,0.0,0
70.0,1.02,0.0,0.0,1.0,42.0,1.2,139.0,3.7,16.2,9300.0,5.4,0.0,0
60.0,1.025,0.0,0.0,1.0,50.0,0.5,145.0,5.0,17.6,6500.0,5.0,0.0,0
60.0,1.02,0.0,0.0,1.0,26.0,0.9,150.0,4.9,15.0,10500.0,5.5,0.0,0
70.0,1.025,0.0,0.0,1.0,38.0,1.0,142.0,3.6,13.7,9200.0,4.9,0.0,0
80.0,1.025,0.0,0.0,1.0,44.0,1.2,146.0,3.6,16.3,8000.0,6.4,0.0,0
80.0,1.02,0.0,0.0,1.0,41.0,0.5,143.0,4.5,15.1,9700.0,5.6,0.0,0
70.0,1.025,0.0,0.0,1.0,16.0,1.1,147.0,3.5,16.4,9100.0,5.2,0.0,0
70.0,1.02,0.0,0.0,1.0,27.0,0.7,145.0,4.8,13.8,6400.0,4.8,0.0,0
60.0,1.025,0.0,0.0,1.0,57.0,0.9,140.0,4.8,15.2,7700.0,5.5,0.0,0
80.0,1.025,0.0,0.0,1.0,45.0,0.6,138.0,3.5,16.1,5400.0,5.7,0.0,0
60.0,1.02,0.0,0.0,1.0,23.0,1.1,139.0,3.5,15.3,6500.0,4.9,0.0,0
70.0,1.025,0.0,0.0,1.0,47.0,0.5,142.0,4.8,16.6,5800.0,5.9,0.0,0
80.0,1.025,0.0,0.0,1.0,22.0,0.8,137.0,5.0,16.8,6000.0,6.5,0.0,0
80.0,1.025,0.0,0.0,1.0,46.0,0.7,141.0,4.9,13.9,5100.0,5.0,0.0,0
60.0,1.02,0.0,0.0,1.0,18.0,1.1,150.0,4.7,15.4,11000.0,4.5,0.0,0
70.0,1.02,0.0,0.0,1.0,25.0,0.6,146.0,4.9,16.5,8000.0,5.1,0.0,0
70.0,1.025,0.0,0.0,1.0,47.0,0.5,142.0,3.5,16.4,5700.0,6.5,0.0,0
80.0,1.025,0.0,0.0,1.0,17.0,0.9,136.0,3.9,16.7,6200.0,5.2,0.0,0
80.0,1.02,0.0,0.0,1.0,15.0,1.2,144.0,3.7,15.5,9500.0,6.4,0.0,0
80.0,1.025,0.0,0.0,1.0,48.0,0.7,140.0,5.0,17.0,7200.0,5.8,0.0,0
80.0,1.025,0.0,0.0,1.0,25.0,0.8,135.0,3.7,15.0,6300.0,5.3,0.0,0
80.0,1.025,0.0,0.0,1.0,16.0,1.1,142.0,4.1,15.6,5800.0,6.3,0.0,0
80.0,1.02,0.0,0.0,1.0,48.0,1.2,147.0,4.3,14.8,6600.0,5.5,0.0,0
60.0,1.025,0.0,0.0,1.0,45.0,0.7,141.0,4.4,13.0,7400.0,5.4,0.0,0
80.0,1.02,0.0,0.0,1.0,46.0,0.8,139.0,5.0,14.1,9500.0,4.6,0.0,0
80.0,1.02,0.0,0.0,1.0,49.0,0.5,150.0,4.9,15.7,6700.0,4.9,0.0,0
70.0,1.025,0.0,0.0,1.0,31.0,1.2,141.0,3.5,16.5,7800.0,6.2,0.0,0
80.0,1.02,0.0,0.0,1.0,26.0,0.6,137.0,4.4,15.8,6600.0,5.4,0.0,0
60.0,1.025,0.0,0.0,1.0,50.0,1.0,135.0,4.9,14.2,7200.0,5.9,0.0,0
80.0,1.025,0.0,0.0,1.0,18.0,1.1,141.0,3.5,15.8,6800.0,6.1,0.0,0
Age,Gender,Alcohol use,Dust Allergy,Genetic Risk,Smoking,Chest Pain,Coughing of Blood,Fatigue,Shortness of Breath,Wheezing,Swallowing Difficulty,Dry Cough,Level
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
35,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
35,1,5,6,5,2,4,8,8,9,2,1,7,High
52,2,4,5,3,3,2,4,3,2,2,3,3,Low
28,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,2,5,6,6,6,6,5,1,3,2,4,4,Medium
46,1,3,4,4,2,4,4,1,4,6,5,1,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
64,2,8,7,7,7,7,7,9,5,7,2,1,High
39,2,5,6,5,6,6,6,5,2,4,3,5,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,2,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,2,7,7,7,7,7,7,2,6,7,6,3,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
35,2,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,2,1,4,2,1,3,1,3,2,4,2,4,Low
26,2,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,1,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
24,1,8,7,6,8,9,6,5,5,2,3,7,High
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
24,2,2,2,1,4,3,6,2,2,3,4,1,Low
35,2,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,2,2,1,3,7,1,1,1,1,3,2,3,Low
53,2,5,6,5,2,4,8,8,9,2,1,7,High
44,2,3,2,3,7,2,2,2,3,2,1,2,Low
38,2,3,5,1,4,2,4,2,3,4,6,2,Low
62,2,2,1,2,6,3,2,4,2,1,2,3,Low
61,2,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,2,2,4,3,2,3,3,4,6,5,5,5,Medium
33,2,6,7,7,3,8,7,3,6,4,2,2,Medium
62,1,8,7,7,8,7,9,3,4,1,4,2,High
32,2,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,1,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
29,2,7,7,7,7,7,7,2,6,7,6,3,High
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,8,7,7,7,7,7,9,5,7,2,1,High
45,1,7,7,7,4,7,7,4,5,6,5,6,High
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
53,1,8,7,6,8,9,6,5,5,2,3,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
46,2,8,7,7,8,7,9,3,4,1,4,2,High
27,1,7,7,7,7,7,7,2,6,7,6,3,High
26,1,7,7,6,7,7,8,4,3,1,4,7,High
37,1,7,7,7,7,7,7,8,7,6,7,6,High
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
29,2,5,6,5,2,4,8,8,9,2,1,7,High
39,2,8,7,7,8,7,9,3,4,1,4,2,High
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,7,7,7,7,7,7,2,6,7,6,3,High
37,2,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,2,8,7,7,7,7,7,9,5,7,2,1,High
25,2,5,6,5,2,4,8,8,9,2,1,7,High
18,2,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
26,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,2,5,6,6,6,6,5,1,3,2,4,4,Medium
27,2,3,4,4,2,4,4,1,4,6,5,1,Medium
48,1,7,7,7,7,7,7,5,2,7,8,5,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,2,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,2,7,7,7,7,7,7,2,6,7,6,3,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
35,2,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,2,6,2,6,6,7,6,5,4,6,5,5,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
42,1,4,5,5,7,2,3,8,7,3,8,6,High
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
24,2,2,2,1,4,3,6,2,2,3,4,1,Low
35,2,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
32,1,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,8,7,7,7,7,7,9,5,7,2,1,High
45,1,7,7,7,4,7,7,4,5,6,5,6,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
53,1,8,7,6,8,9,6,5,5,2,3,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
27,1,7,7,7,7,7,7,2,6,7,6,3,High
26,1,7,7,6,7,7,8,4,3,1,4,7,High
37,1,7,7,7,7,7,7,8,7,6,7,6,High
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
29,2,5,6,5,2,4,8,8,9,2,1,7,High
39,2,8,7,7,8,7,9,3,4,1,4,2,High
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,7,7,7,7,7,7,2,6,7,6,3,High
37,2,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,2,8,7,7,7,7,7,9,5,7,2,1,High
25,2,5,6,5,2,4,8,8,9,2,1,7,High
18,2,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
35,1,5,6,6,6,6,5,1,3,2,4,4,Medium
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
26,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
35,1,5,6,5,2,4,8,8,9,2,1,7,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,1,5,6,6,6,6,5,1,3,2,4,4,Medium
27,1,3,4,4,2,4,4,1,4,6,5,1,Medium
48,1,7,7,7,7,7,7,5,2,7,8,5,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,2,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,2,7,7,7,7,7,7,2,6,7,6,3,High
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
35,2,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
24,2,2,2,1,4,3,6,2,2,3,4,1,Low
35,2,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
32,1,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,8,7,7,7,7,7,9,5,7,2,1,High
45,1,7,7,7,4,7,7,4,5,6,5,6,High
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
53,1,8,7,6,8,9,6,5,5,2,3,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
27,1,7,7,7,7,7,7,2,6,7,6,3,High
26,1,7,7,6,7,7,8,4,3,1,4,7,High
37,1,7,7,7,7,7,7,8,7,6,7,6,High
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
29,2,5,6,5,2,4,8,8,9,2,1,7,High
39,2,8,7,7,8,7,9,3,4,1,4,2,High
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,7,7,7,7,7,7,2,6,7,6,3,High
37,2,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,2,8,7,7,7,7,7,9,5,7,2,1,High
25,2,5,6,5,2,4,8,8,9,2,1,7,High
18,2,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
27,1,3,4,4,2,4,4,1,4,6,5,1,Medium
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
26,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
35,1,5,6,5,2,4,8,8,9,2,1,7,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,1,5,6,6,6,6,5,1,3,2,4,4,Medium
27,1,3,4,4,2,4,4,1,4,6,5,1,Medium
48,1,7,7,7,7,7,7,5,2,7,8,5,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,2,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,2,7,7,7,7,7,7,2,6,7,6,3,High
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
35,2,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
24,2,2,2,1,4,3,6,2,2,3,4,1,Low
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,1,2,4,6,6,7,2,3,7,3,8,3,Low
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
35,2,1,2,2,2,2,1,3,5,1,3,2,Low
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
25,2,2,3,3,3,1,1,1,3,2,5,1,Low
38,2,2,1,2,1,2,2,2,1,3,4,4,Low
43,2,2,3,2,2,2,4,1,4,2,4,3,Low
44,2,2,2,1,4,3,6,2,2,3,4,1,Low
55,2,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
32,2,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
32,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
46,2,1,5,2,1,2,4,6,2,5,8,2,Medium
51,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,1,2,3,2,3,3,4,4,2,4,6,2,Medium
45,1,8,7,7,1,4,3,2,6,5,1,4,Medium
54,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,8,7,7,7,7,7,9,5,7,2,1,High
45,1,7,7,7,4,7,7,4,5,6,5,6,High
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
63,1,8,7,6,8,9,6,5,5,2,3,7,High
45,1,5,6,5,2,4,8,8,9,2,1,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,7,7,7,7,2,6,7,6,3,High
36,1,7,7,6,7,7,8,4,3,1,4,7,High
37,1,7,7,7,7,7,7,8,7,6,7,6,High
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,2,4,8,8,9,2,1,7,High
39,1,8,7,7,8,7,9,3,4,1,4,2,High
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
36,1,7,7,7,7,7,7,2,6,7,6,3,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,1,8,7,7,7,7,7,9,5,7,2,1,High
25,1,5,6,5,2,4,8,8,9,2,1,7,High
28,1,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
48,1,7,7,7,7,7,7,5,2,7,8,5,High
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
26,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
35,1,5,6,5,2,4,8,8,9,2,1,7,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,2,5,6,6,6,6,5,1,3,2,4,4,Medium
27,2,3,4,4,2,4,4,1,4,6,5,1,Medium
48,2,7,7,7,7,7,7,5,2,7,8,5,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
24,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,1,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,1,7,7,7,7,7,7,2,6,7,6,3,High
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,1,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,1,6,7,3,3,2,2,3,7,7,4,7,Medium
35,1,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
24,1,2,2,1,4,3,6,2,2,3,4,1,Low
35,1,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
32,1,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,8,7,7,7,7,7,9,5,7,2,1,High
45,1,7,7,7,4,7,7,4,5,6,5,6,High
32,1,6,7,3,3,2,2,3,7,7,4,7,Medium
53,1,8,7,6,8,9,6,5,5,2,3,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
27,1,7,7,7,7,7,7,2,6,7,6,3,High
26,1,7,7,6,7,7,8,4,3,1,4,7,High
37,1,7,7,7,7,7,7,8,7,6,7,6,High
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
29,2,5,6,5,2,4,8,8,9,2,1,7,High
39,2,8,7,7,8,7,9,3,4,1,4,2,High
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,7,7,7,7,7,7,2,6,7,6,3,High
37,2,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,2,8,7,7,7,7,7,9,5,7,2,1,High
25,2,5,6,5,2,4,8,8,9,2,1,7,High
18,2,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
26,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
35,1,5,6,5,2,4,8,8,9,2,1,7,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,1,5,6,6,6,6,5,1,3,2,4,4,Medium
27,1,3,4,4,2,4,4,1,4,6,5,1,Medium
48,1,7,7,7,7,7,7,5,2,7,8,5,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,2,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,2,7,7,7,7,7,7,2,6,7,6,3,High
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
35,2,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
24,2,2,2,1,4,3,6,2,2,3,4,1,Low
35,2,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
32,1,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,8,7,7,7,7,7,9,5,7,2,1,High
45,1,7,7,7,4,7,7,4,5,6,5,6,High
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
53,1,8,7,6,8,9,6,5,5,2,3,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
27,1,7,7,7,7,7,7,2,6,7,6,3,High
26,1,7,7,6,7,7,8,4,3,1,4,7,High
37,1,7,7,7,7,7,7,8,7,6,7,6,High
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
29,2,5,6,5,2,4,8,8,9,2,1,7,High
39,2,8,7,7,8,7,9,3,4,1,4,2,High
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,7,7,7,7,7,7,2,6,7,6,3,High
37,2,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,2,8,7,7,7,7,7,9,5,7,2,1,High
25,2,5,6,5,2,4,8,8,9,2,1,7,High
18,2,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
26,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
35,1,5,6,5,2,4,8,8,9,2,1,7,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,1,5,6,6,6,6,5,1,3,2,4,4,Medium
27,1,3,4,4,2,4,4,1,4,6,5,1,Medium
48,1,7,7,7,7,7,7,5,2,7,8,5,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,2,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,2,7,7,7,7,7,7,2,6,7,6,3,High
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
35,2,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
24,2,2,2,1,4,3,6,2,2,3,4,1,Low
35,2,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
44,1,7,7,7,7,7,7,5,2,7,8,5,High
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,8,7,7,7,7,7,9,5,7,2,1,High
32,1,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
45,1,7,7,7,4,7,7,4,5,6,5,6,High
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,8,7,7,7,7,7,9,5,7,2,1,High
45,1,7,7,7,4,7,7,4,5,6,5,6,High
53,1,8,7,6,8,9,6,5,5,2,3,7,High
53,1,8,7,6,8,9,6,5,5,2,3,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
27,1,7,7,7,7,7,7,2,6,7,6,3,High
26,1,7,7,6,7,7,8,4,3,1,4,7,High
37,1,7,7,7,7,7,7,8,7,6,7,6,High
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
29,2,5,6,5,2,4,8,8,9,2,1,7,High
39,2,8,7,7,8,7,9,3,4,1,4,2,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,7,7,7,7,7,7,2,6,7,6,3,High
37,2,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,2,8,7,7,7,7,7,9,5,7,2,1,High
25,2,5,6,5,2,4,8,8,9,2,1,7,High
18,2,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
46,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
35,1,5,6,5,2,4,8,8,9,2,1,7,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,1,5,6,6,6,6,5,1,3,2,4,4,Medium
27,1,3,4,4,2,4,4,1,4,6,5,1,Medium
48,1,7,7,7,7,7,7,5,2,7,8,5,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
27,1,7,7,7,7,7,7,2,6,7,6,3,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,2,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,2,7,7,7,7,7,7,2,6,7,6,3,High
26,1,7,7,6,7,7,8,4,3,1,4,7,High
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
35,2,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
37,1,7,7,7,7,7,7,8,7,6,7,6,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
28,1,7,7,7,7,7,7,5,2,7,8,5,High
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
24,2,2,2,1,4,3,6,2,2,3,4,1,Low
35,2,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
19,1,8,7,7,7,7,7,9,5,7,2,1,High
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
29,2,5,6,5,2,4,8,8,9,2,1,7,High
32,1,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
39,2,8,7,7,8,7,9,3,4,1,4,2,High
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,8,7,7,7,7,7,9,5,7,2,1,High
45,1,7,7,7,4,7,7,4,5,6,5,6,High
49,1,5,6,5,2,4,8,8,9,2,1,7,High
53,1,8,7,6,8,9,6,5,5,2,3,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
27,1,7,7,7,7,7,7,2,6,7,6,3,High
26,1,7,7,6,7,7,8,4,3,1,4,7,High
37,1,7,7,7,7,7,7,8,7,6,7,6,High
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
29,2,5,6,5,2,4,8,8,9,2,1,7,High
39,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,7,7,7,7,7,7,2,6,7,6,3,High
37,2,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,2,8,7,7,7,7,7,9,5,7,2,1,High
25,2,5,6,5,2,4,8,8,9,2,1,7,High
18,2,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
26,2,7,7,7,7,7,7,2,6,7,6,3,High
26,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
35,2,5,6,5,2,4,8,8,9,2,1,7,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
35,1,5,6,6,6,6,5,1,3,2,4,4,Medium
27,1,3,4,4,2,4,4,1,4,6,5,1,Medium
48,1,7,7,7,7,7,7,5,2,7,8,5,High
64,1,8,7,7,7,7,7,9,5,7,2,1,High
39,1,5,6,5,6,6,6,5,2,4,3,5,Medium
37,2,7,7,6,7,7,8,4,3,1,4,7,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
73,1,6,6,6,8,5,5,4,6,2,1,6,Medium
17,1,1,5,4,2,2,3,1,7,8,6,7,Medium
34,1,7,7,6,7,7,8,4,3,1,4,7,High
36,1,7,7,7,7,7,7,8,7,6,7,6,High
14,1,4,5,5,5,6,5,5,2,1,4,1,Medium
24,1,8,7,6,8,9,6,5,5,2,3,7,High
53,2,5,6,5,2,4,8,8,9,2,1,7,High
62,1,8,7,7,8,7,9,3,4,1,4,2,High
29,2,7,7,7,7,7,7,2,6,7,6,3,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
65,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
19,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,7,7,7,4,7,7,4,5,6,5,6,High
28,2,6,7,3,3,2,2,3,7,7,4,7,Medium
35,2,6,2,6,6,7,6,5,4,6,5,5,High
42,1,4,5,5,7,2,3,8,7,3,8,6,High
32,2,6,7,7,3,8,7,3,6,4,2,2,Medium
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
25,2,1,4,2,1,3,1,3,2,4,2,4,Low
44,1,7,7,7,7,7,7,5,2,7,8,5,High
27,2,1,4,3,2,4,2,2,3,4,1,6,Low
28,1,7,8,6,4,7,8,2,6,4,2,2,Low
32,1,3,6,7,4,7,4,2,3,2,2,5,Low
45,2,2,4,6,6,7,2,3,7,3,8,3,Low
27,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,1,3,1,3,3,4,3,1,3,4,5,3,Low
48,1,2,3,1,1,1,4,2,1,2,4,2,Low
17,2,2,3,4,3,1,2,1,3,2,1,1,Low
22,2,1,3,3,6,1,2,3,1,3,2,1,Low
42,1,1,2,4,1,6,2,1,1,2,1,1,Low
37,2,8,7,7,7,7,7,9,5,7,2,1,High
35,1,3,2,2,2,3,4,4,2,2,3,2,Low
24,2,2,2,2,2,1,1,1,1,2,3,2,Low
38,2,2,3,3,3,1,1,1,3,2,5,1,Low
18,2,2,1,2,1,2,2,2,1,3,4,4,Low
23,2,2,3,2,2,2,4,1,4,2,4,3,Low
24,2,2,2,1,4,3,6,2,2,3,4,1,Low
35,2,1,2,2,2,2,1,3,5,1,3,2,Low
38,2,2,3,2,2,1,3,1,1,1,1,4,Low
47,2,3,1,2,2,2,5,3,1,2,3,4,Low
52,1,2,1,3,7,1,1,1,1,3,2,3,Low
25,2,5,6,5,2,4,8,8,9,2,1,7,High
44,1,3,2,3,7,2,2,2,3,2,1,2,Low
38,1,3,5,1,4,2,4,2,3,4,6,2,Low
62,1,2,1,2,6,3,2,4,2,1,2,3,Low
61,1,3,4,1,3,1,5,2,3,2,1,1,Low
55,1,1,1,2,3,4,3,2,2,1,2,5,Low
45,2,2,3,2,3,3,4,4,2,4,6,2,Medium
38,2,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,1,5,2,1,2,4,6,2,5,8,2,Medium
45,1,2,4,3,2,3,3,4,6,5,5,5,Medium
33,1,6,7,7,3,8,7,3,6,4,2,2,Medium
18,2,8,7,7,8,7,9,3,4,1,4,2,High
32,1,6,7,3,3,2,2,3,7,7,4,7,Medium
44,1,2,3,2,3,3,4,4,2,4,6,2,Medium
62,1,8,7,7,1,4,3,2,6,5,1,4,Medium
38,2,1,5,2,1,2,4,6,2,5,8,2,Medium
33,1,2,4,3,2,3,3,4,6,5,5,5,Medium
22,1,8,7,7,1,4,3,2,6,5,1,4,Medium
35,1,1,5,2,1,2,4,6,2,5,8,2,Medium
23,1,2,4,3,2,3,3,4,6,5,5,5,Medium
48,2,6,7,7,3,8,7,3,6,4,2,2,Medium
46,2,6,7,3,3,2,2,3,7,7,4,7,Medium
47,1,5,6,5,2,4,8,8,9,2,1,7,High
52,2,2,3,2,3,3,4,4,2,4,6,2,Medium
52,1,8,7,7,1,4,3,2,6,5,1,4,Medium
48,2,8,7,7,1,4,3,2,6,5,1,4,Medium
36,2,1,5,2,1,2,4,6,2,5,8,2,Medium
31,2,2,4,3,2,3,3,4,6,5,5,5,Medium
38,2,2,3,2,3,3,4,4,2,4,6,2,Medium
35,1,8,7,7,1,4,3,2,6,5,1,4,Medium
44,1,7,7,7,7,7,7,5,2,7,8,5,High
33,1,4,5,3,3,2,4,3,2,2,3,3,Low
45,1,1,4,2,1,3,1,3,2,4,2,4,Low
26,2,8,7,7,8,7,9,3,4,1,4,2,High
53,1,1,4,3,2,4,2,2,3,4,1,6,Low
35,2,5,6,5,2,4,8,8,9,2,1,7,High
46,1,8,7,7,8,7,9,3,4,1,4,2,High
27,1,7,7,7,7,7,7,2,6,7,6,3,High
26,1,2,4,3,2,3,3,4,6,5,5,5,Medium
37,1,2,3,2,3,3,4,4,2,4,6,2,Medium
28,1,7,7,7,7,7,7,5,2,7,8,5,High
19,1,8,7,7,7,7,7,9,5,7,2,1,High
29,2,5,6,5,2,4,8,8,9,2,1,7,High
39,2,8,7,7,8,7,9,3,4,1,4,2,High
37,1,7,7,6,7,7,8,4,3,1,4,7,High
49,1,5,6,5,2,4,8,8,9,2,1,7,High
37,1,8,7,7,8,7,9,3,4,1,4,2,High
26,2,7,7,7,7,7,7,2,6,7,6,3,High
37,2,7,7,6,7,7,8,4,3,1,4,7,High
33,1,7,7,7,7,7,7,8,7,6,7,6,High
44,1,7,7,7,7,7,7,5,2,7,8,5,High
37,2,8,7,7,7,7,7,9,5,7,2,1,High
25,2,5,6,5,2,4,8,8,9,2,1,7,High
18,2,8,7,7,8,7,9,3,4,1,4,2,High
47,1,5,6,5,2,4,8,8,9,2,1,7,High
GENDER,AGE,SMOKING,YELLOW_FINGERS,ANXIETY,PEER_PRESSURE,CHRONIC DISEASE,FATIGUE ,ALLERGY ,WHEEZING,ALCOHOL CONSU1ING,COUGHING,SHORTNESS OF BREATH,SWALLOWING DIFFICULTY,CHEST PAIN,LUNG_CANCER
1,69,0,1,1,0,0,1,0,1,1,1,1,1,1,1
1,74,1,0,0,0,1,1,1,0,0,0,1,1,1,1
0,59,0,0,0,1,0,1,0,1,0,1,1,0,1,0
1,63,1,1,1,0,0,0,0,0,1,0,0,1,1,0
0,63,0,1,0,0,0,0,0,1,0,1,1,0,0,0
0,75,0,1,0,0,1,1,1,1,0,1,1,0,0,1
1,52,1,0,0,0,0,1,0,1,1,1,1,0,1,1
0,51,1,1,1,1,0,1,1,0,0,0,1,1,0,1
0,68,1,0,1,0,0,1,0,0,0,0,0,0,0,0
1,53,1,1,1,1,1,0,1,0,1,0,0,1,1,1
0,61,1,1,1,1,1,1,0,1,0,1,1,1,0,1
1,72,0,0,0,0,1,1,1,1,1,1,1,0,1,1
0,60,1,0,0,0,0,1,0,0,0,0,1,0,0,0
1,58,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,69,1,0,0,0,0,0,1,1,1,1,0,0,1,0
0,48,0,1,1,1,1,1,1,1,0,1,1,1,0,1
1,75,1,0,0,0,1,0,1,1,1,1,1,0,1,1
1,57,1,1,1,1,1,0,0,0,1,0,0,1,1,1
0,68,1,1,1,1,1,1,0,0,0,1,1,0,0,1
0,61,0,0,0,0,1,1,0,0,0,0,1,0,0,0
0,44,1,1,1,1,1,1,0,0,0,0,1,1,0,1
0,64,0,1,1,1,0,0,1,1,0,1,0,1,0,1
0,21,1,0,0,0,1,1,1,0,0,0,1,0,0,0
1,60,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,72,1,1,1,1,1,0,1,1,1,1,0,1,1,1
1,65,0,1,1,0,0,1,0,1,1,1,1,1,1,1
0,61,1,1,1,0,0,1,1,0,1,0,1,1,1,1
1,69,0,0,0,1,0,1,0,1,0,1,1,0,1,0
0,53,1,1,1,0,1,0,0,1,1,0,1,1,1,1
1,55,0,1,0,0,0,1,0,1,1,1,1,0,0,0
0,57,1,1,0,0,0,0,0,0,0,0,1,0,0,0
1,62,1,0,1,0,0,0,1,1,1,0,1,1,1,1
1,56,1,1,1,0,0,0,0,0,0,0,1,1,0,0
0,67,1,1,1,0,1,0,0,0,0,0,1,1,1,1
1,59,0,1,1,0,0,0,0,0,0,0,0,1,1,0
0,59,1,1,1,0,1,0,0,0,0,0,1,1,0,1
1,60,0,1,0,0,1,0,0,1,0,1,1,0,1,1
0,56,0,0,0,0,1,0,0,1,0,0,1,1,0,0
1,56,1,0,0,0,1,0,0,1,0,0,1,0,1,1
1,60,1,0,0,0,1,0,1,1,1,1,0,0,1,1
1,68,1,0,1,0,0,1,1,0,1,1,1,0,1,1
1,63,0,0,0,1,0,1,1,1,1,0,0,1,0,1
0,77,0,1,1,1,1,1,0,1,1,0,0,0,0,1
1,52,1,0,0,1,0,1,1,1,1,0,1,0,1,1
0,70,1,1,0,1,1,0,0,0,1,1,0,1,0,1
1,72,1,1,1,1,1,1,0,1,1,1,1,1,1,1
1,62,1,1,0,0,1,0,1,0,0,1,1,1,1,1
0,64,1,1,0,1,0,1,0,1,1,1,0,1,1,1
0,70,0,0,1,1,1,1,1,1,1,0,1,1,1,1
1,60,0,0,1,1,1,0,0,0,1,0,0,0,0,0
0,56,0,0,0,1,1,1,1,1,1,0,0,0,1,1
1,63,1,1,1,0,1,1,1,1,0,0,1,0,0,1
0,54,1,0,0,1,0,1,1,1,1,1,0,1,1,1
1,49,1,0,0,1,1,1,1,1,1,1,1,1,1,1
0,57,0,1,0,1,1,1,1,0,1,1,0,0,0,1
1,52,0,1,1,0,1,0,1,1,1,1,0,1,0,1
0,63,0,1,0,1,0,1,0,0,0,1,1,0,1,1
1,73,0,0,0,0,1,0,1,0,1,1,1,1,1,1
1,47,0,1,0,1,1,1,0,1,0,0,1,1,1,1
1,69,1,1,1,1,0,1,1,0,1,1,1,0,1,1
1,70,0,1,0,1,1,1,1,1,1,1,0,1,1,1
0,60,0,1,1,0,0,0,0,0,0,1,0,0,0,0
1,70,0,1,0,1,0,1,1,1,1,1,0,0,0,1
0,68,0,0,1,0,1,0,1,1,1,0,0,1,0,1
1,74,0,1,0,1,0,1,1,1,1,1,1,0,1,1
0,71,1,1,1,1,1,1,0,1,0,1,0,1,1,1
0,56,0,1,0,0,1,1,1,1,0,1,1,0,1,1
1,66,1,0,0,0,0,1,0,1,1,1,1,0,0,1
0,76,1,1,1,1,0,1,1,0,0,0,1,1,1,1
0,78,1,1,1,1,0,1,0,1,0,1,1,1,0,1
1,68,1,1,1,1,0,0,1,0,1,0,0,1,1,1
0,66,1,1,1,1,0,1,0,1,0,1,1,1,0,1
1,67,0,0,0,0,1,1,1,1,1,1,1,0,1,1
0,60,1,0,0,0,1,1,0,0,0,0,1,0,0,1
1,61,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,58,1,0,0,0,0,0,1,1,1,1,0,0,0,1
0,76,0,1,1,1,1,1,1,1,0,1,1,1,1,1
1,56,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,67,1,1,1,1,1,0,0,0,1,0,0,1,1,1
0,73,1,1,1,1,0,1,0,0,0,1,1,1,1,1
0,58,0,0,0,0,0,1,0,0,0,0,1,0,0,0
0,54,1,1,1,1,1,1,0,0,0,0,1,1,0,1
0,62,1,1,1,1,1,0,1,1,1,0,0,1,1,1
0,81,0,0,0,1,1,0,1,0,1,1,1,0,0,1
1,56,0,0,0,0,1,1,1,0,1,1,1,0,1,1
1,60,0,1,1,0,0,0,0,1,1,1,1,1,0,1
1,66,0,1,1,0,1,0,1,0,1,1,1,0,1,1
1,62,0,1,1,0,0,1,0,1,0,0,0,1,1,1
0,62,1,1,1,0,1,0,1,0,1,0,0,0,0,1
0,55,1,0,0,1,1,1,1,1,1,0,0,1,1,1
0,62,0,0,0,1,0,0,0,1,1,0,0,1,1,1
0,71,0,0,0,0,1,1,1,0,0,1,1,0,1,1
1,52,1,0,0,0,1,1,1,1,1,0,0,1,1,1
0,59,0,1,1,1,1,0,1,1,1,1,1,1,0,1
1,48,1,0,0,0,1,1,1,0,1,1,1,1,1,1
1,60,0,1,1,1,0,1,0,0,0,0,0,1,1,1
0,61,1,1,1,0,0,0,1,0,1,1,1,0,1,1
1,59,1,0,0,1,0,0,0,0,1,1,1,0,0,1
1,64,0,1,1,1,0,1,1,0,0,1,0,1,0,1
1,56,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,58,1,0,0,0,0,0,1,1,1,1,0,0,0,1
0,81,0,1,1,1,1,1,1,1,0,1,1,1,1,1
1,64,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,62,1,1,1,1,1,0,0,0,1,0,0,1,1,1
0,72,1,1,1,1,0,1,0,0,0,1,1,1,1,1
0,60,0,0,0,0,1,1,0,0,0,0,1,0,0,1
0,61,1,1,1,1,1,1,0,0,0,0,1,1,0,1
0,60,1,1,1,1,1,0,1,1,1,0,0,1,1,1
0,49,0,0,0,1,1,0,1,0,1,1,1,0,0,1
1,53,0,0,0,0,1,1,1,0,1,0,1,0,1,1
1,58,0,1,1,0,0,1,0,1,1,1,1,1,1,1
1,61,1,1,1,0,0,1,1,0,1,0,1,1,1,1
0,68,0,0,0,1,0,1,0,1,0,1,1,0,1,1
1,60,1,1,1,0,0,0,0,0,1,0,0,1,1,1
0,72,0,1,0,0,0,1,0,1,1,1,1,0,0,1
0,72,0,1,0,0,1,1,1,1,0,1,1,0,0,1
1,57,1,0,0,0,0,1,0,1,1,1,1,0,1,1
0,51,1,1,1,1,0,1,1,0,0,0,1,1,0,1
0,54,1,1,1,1,0,1,0,1,0,1,1,1,0,1
0,56,0,1,1,1,0,0,1,0,1,0,0,1,1,1
1,77,1,1,1,1,0,1,0,1,0,1,1,1,0,1
1,64,0,0,0,0,1,1,1,1,1,1,1,0,1,1
1,57,1,0,1,0,1,1,0,0,0,0,1,0,0,1
0,66,1,1,1,0,1,1,1,1,1,1,1,0,0,1
1,70,1,0,0,0,0,0,1,0,1,1,0,0,1,1
0,53,0,1,1,1,1,1,1,0,0,1,1,0,0,1
1,51,1,0,0,0,0,1,0,1,1,1,1,0,1,1
1,58,1,1,1,1,1,0,0,0,1,0,0,1,1,1
0,58,1,1,1,1,0,1,0,0,0,1,1,1,0,1
0,63,0,0,0,0,1,1,0,0,0,0,1,0,0,0
0,51,1,1,1,1,0,1,0,0,0,0,1,1,0,1
0,61,0,1,1,1,0,0,1,1,0,1,0,1,0,1
0,61,1,0,0,0,1,1,1,0,0,0,1,0,0,1
1,76,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,71,1,1,1,0,1,0,1,1,1,1,0,1,1,1
1,69,0,0,1,0,0,1,0,1,1,1,1,1,0,1
0,56,1,1,1,0,0,1,1,0,0,0,1,0,1,1
1,67,0,0,0,1,0,1,0,1,0,1,1,0,1,1
0,54,1,1,1,0,1,0,0,1,1,0,1,1,1,1
1,63,0,1,0,0,0,1,0,1,1,1,1,0,0,1
0,47,1,1,0,1,1,1,1,1,0,1,1,0,0,1
1,62,1,0,1,0,0,1,0,1,1,1,1,0,1,1
1,65,1,1,1,1,0,1,1,0,0,0,1,1,0,1
0,63,1,1,1,1,1,1,1,1,0,1,1,1,1,1
1,64,0,1,1,1,0,0,1,0,1,0,0,1,1,1
0,65,1,1,1,1,0,1,0,1,0,1,1,1,0,1
1,51,0,1,0,0,1,1,1,1,1,1,1,0,1,1
0,56,0,0,0,1,1,1,0,0,1,1,1,1,0,1
1,70,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,58,1,0,0,0,0,0,1,1,1,1,0,0,1,1
1,67,1,0,1,0,0,1,1,0,1,1,1,0,1,1
1,62,0,0,0,1,0,1,1,1,1,0,0,1,0,1
0,74,0,1,1,1,1,1,0,1,1,0,0,0,0,1
1,69,1,0,0,1,0,0,0,0,0,0,0,0,1,0
0,64,1,1,0,1,1,0,0,0,0,0,0,0,0,0
1,75,1,1,1,1,1,0,0,0,0,0,0,0,1,1
1,47,1,1,0,0,1,0,0,0,0,0,0,0,1,0
0,57,1,1,0,1,0,0,0,0,0,0,0,0,1,0
0,56,0,0,1,1,1,1,1,1,1,0,1,1,1,1
1,68,0,0,1,1,1,0,0,0,1,0,0,0,0,0
0,55,0,0,0,1,1,1,1,1,1,0,0,0,1,1
1,62,1,1,1,0,1,1,1,1,0,0,1,0,0,1
0,73,1,0,0,1,0,1,1,1,1,1,0,1,1,1
1,68,1,0,0,1,1,1,1,1,1,1,1,1,1,1
0,75,0,1,0,1,1,1,1,0,1,1,0,0,0,1
1,63,0,1,1,0,1,0,1,1,1,1,0,1,0,1
0,61,0,1,0,1,0,1,0,0,0,1,1,0,1,1
1,62,0,0,0,0,1,0,1,0,1,1,1,1,1,1
1,44,0,1,0,1,1,1,0,1,0,0,1,1,1,1
1,56,1,1,1,1,0,1,1,0,1,1,1,0,1,1
1,54,0,1,0,1,1,1,1,1,1,1,0,1,1,1
0,57,0,1,1,0,0,0,0,0,0,1,0,0,0,0
1,56,0,1,0,1,0,1,1,1,1,1,0,0,0,1
0,69,0,0,1,0,1,0,1,1,1,0,0,1,0,1
1,72,0,1,0,1,0,1,1,1,1,1,1,0,1,1
0,59,1,1,1,1,1,1,0,1,0,1,0,1,1,1
0,70,0,1,0,0,1,1,1,1,0,1,1,0,1,1
1,64,1,0,0,0,0,1,0,1,1,1,1,0,0,1
0,61,1,1,1,1,0,1,1,0,0,0,1,1,1,1
0,72,1,1,1,1,0,1,0,1,0,1,1,1,0,1
1,63,1,1,1,1,0,0,1,0,1,0,0,1,1,1
0,74,1,1,1,1,0,1,0,1,0,1,1,1,0,1
1,71,0,0,0,0,1,1,1,1,1,1,1,0,1,1
0,71,1,0,0,0,1,1,0,0,0,0,1,0,0,0
1,72,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,77,1,0,0,0,0,0,1,1,1,1,0,0,0,1
0,72,0,1,1,1,1,1,0,0,0,0,0,0,0,1
1,55,1,0,0,0,0,1,0,0,0,0,0,0,0,1
1,65,1,1,1,1,1,0,0,0,0,0,0,0,0,1
0,67,1,1,1,1,0,1,0,0,0,0,0,0,0,1
0,69,0,0,0,0,1,1,0,0,0,0,0,0,0,1
0,55,1,1,1,1,1,1,0,0,0,0,0,0,0,1
0,51,1,1,1,1,1,0,0,0,0,0,0,0,0,1
0,64,0,0,0,1,1,0,0,0,0,0,0,0,0,1
1,63,0,0,0,0,1,1,1,0,1,1,1,0,1,1
1,69,0,1,1,0,0,0,0,1,1,1,1,1,0,1
1,64,0,1,1,0,1,0,1,0,1,1,1,0,1,1
1,59,0,1,1,0,0,1,0,1,0,0,0,1,1,1
0,73,1,1,1,0,1,0,1,0,1,0,0,0,0,1
0,55,1,0,0,1,1,1,1,1,1,0,0,1,1,1
0,63,0,0,0,1,0,0,0,1,1,0,0,1,1,1
0,60,0,0,0,0,1,1,1,0,0,1,1,0,1,1
1,74,1,0,0,0,1,1,1,1,1,0,0,1,1,1
0,65,0,1,1,1,1,0,1,1,1,1,1,1,0,1
1,79,1,0,0,0,1,1,1,0,1,1,1,1,1,1
1,62,0,1,1,1,0,1,0,0,0,0,0,1,1,1
0,71,1,1,1,0,0,0,1,0,1,1,1,0,1,1
1,63,1,0,0,1,0,0,0,0,0,1,1,0,0,0
1,67,0,1,1,1,0,1,1,0,0,1,0,1,0,1
1,55,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,54,1,0,0,0,0,0,1,1,1,1,0,0,0,1
0,77,0,1,1,1,1,1,1,1,0,1,1,1,1,1
1,58,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,64,1,1,1,1,1,0,0,0,1,0,0,1,1,1
0,61,1,1,1,1,0,1,0,0,0,1,1,1,1,1
0,62,0,0,0,0,1,1,0,0,0,0,1,0,0,0
0,67,1,1,1,1,1,1,0,0,0,0,1,1,0,1
0,56,1,1,1,1,1,0,1,1,1,0,0,1,1,1
0,70,0,0,0,1,1,0,1,0,1,1,1,0,0,1
1,70,0,0,0,0,1,1,1,0,1,1,1,0,1,1
0,57,0,0,1,1,1,1,1,1,1,0,1,1,1,1
1,61,0,0,1,1,1,0,0,0,1,0,0,0,0,0
0,77,0,0,0,1,1,1,1,1,1,0,0,0,1,1
1,63,1,1,1,0,1,1,1,1,0,0,1,0,0,1
0,62,1,0,0,1,0,1,1,1,1,1,0,1,1,1
1,59,1,0,0,1,1,1,1,1,1,1,1,1,1,1
0,70,0,1,0,1,1,1,1,0,1,1,0,0,0,1
1,71,0,1,1,0,1,0,1,1,1,1,0,1,0,1
0,56,0,1,0,1,0,1,0,0,0,1,1,0,1,1
1,57,0,0,0,0,1,0,1,0,1,1,1,1,1,1
1,78,0,1,0,1,1,1,0,1,0,0,1,1,1,1
1,64,1,1,1,1,0,1,1,0,1,1,1,0,1,1
1,62,0,1,0,1,1,1,1,1,1,1,0,1,1,1
0,49,0,1,1,0,0,0,0,0,0,1,0,0,0,1
1,77,0,1,0,1,0,1,1,1,1,1,0,0,0,1
0,64,0,0,1,0,1,0,1,1,1,0,0,1,0,1
1,63,0,1,0,1,0,1,1,1,1,1,1,0,1,1
0,54,1,1,1,1,1,1,0,1,0,1,0,1,1,1
0,38,0,1,0,0,1,1,1,1,0,1,1,0,1,1
0,75,0,1,1,1,0,0,1,1,0,1,0,1,0,1
0,70,1,0,0,1,1,0,1,0,0,0,1,0,0,1
1,59,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,77,1,1,1,0,1,0,1,1,0,0,0,1,1,1
1,61,0,0,1,0,1,1,0,1,1,1,1,1,0,1
0,64,1,1,1,0,0,1,1,0,0,0,1,0,1,1
1,59,0,0,0,1,0,1,0,1,0,0,1,0,1,0
0,71,1,1,1,0,1,0,0,1,1,0,1,1,1,1
1,67,0,1,0,0,0,1,0,1,1,1,1,0,0,1
0,64,1,1,0,1,1,1,1,1,0,1,1,0,0,1
1,68,1,0,1,0,0,1,0,0,0,0,0,0,0,0
1,69,1,1,1,1,0,1,1,0,0,0,1,1,0,1
0,64,1,1,1,1,1,1,1,1,0,1,1,1,1,1
1,59,0,1,1,1,1,0,1,0,1,0,0,1,1,1
0,67,1,1,1,1,0,1,0,1,0,1,1,1,0,1
1,74,0,1,0,0,1,1,1,1,1,1,1,0,1,1
0,77,0,0,0,1,1,1,0,0,1,1,1,1,0,1
1,60,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,64,1,0,0,0,0,0,1,1,1,1,0,0,1,1
1,70,1,0,1,0,0,1,1,0,1,1,1,0,1,1
1,58,0,0,0,1,0,1,1,1,1,0,0,1,0,1
0,59,0,1,1,1,1,1,0,1,1,0,0,0,0,1
1,39,1,0,0,1,0,1,1,1,1,0,1,0,1,1
0,67,0,1,0,0,0,0,0,1,0,1,1,0,0,0
0,71,0,1,0,0,1,1,1,1,0,1,1,0,0,1
1,70,1,0,0,0,0,1,0,1,1,1,1,0,1,1
0,60,1,1,1,1,0,1,1,0,0,0,1,1,0,1
0,55,1,0,1,0,0,1,0,0,0,0,0,0,0,0
1,60,1,1,1,1,1,0,1,0,1,0,0,1,1,1
0,55,1,1,1,1,1,1,0,1,0,1,1,1,0,1
1,55,0,0,0,0,1,1,1,1,1,1,1,0,1,1
0,70,1,0,0,0,0,1,0,0,0,0,1,0,0,0
1,63,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,64,1,0,0,0,0,0,1,1,1,1,0,0,1,0
0,59,0,1,1,1,1,1,1,1,0,1,1,1,0,1
1,56,1,0,0,0,1,0,1,1,1,1,1,0,1,1
1,64,1,1,1,1,1,0,0,0,1,0,0,1,1,1
0,62,1,1,1,1,1,1,0,0,0,1,1,0,0,1
0,87,0,0,0,0,1,1,0,0,0,0,1,0,0,0
0,77,1,1,1,1,1,1,0,0,0,0,1,1,0,1
0,59,0,1,1,1,0,0,1,1,0,1,0,1,0,1
0,59,1,0,0,0,1,1,1,0,0,0,1,0,0,0
1,55,1,0,0,0,0,1,1,0,0,0,1,0,1,0
1,46,0,1,1,0,0,0,0,0,0,0,0,1,1,0
1,60,0,1,1,0,0,1,0,1,1,1,1,1,1,1
1,58,1,1,1,1,1,0,0,0,1,0,0,1,1,1
0,58,1,1,1,1,0,1,0,0,0,1,1,1,0,1
0,63,0,0,0,0,1,1,0,0,0,0,1,0,0,0
0,51,1,1,1,1,0,1,0,0,0,0,1,1,0,1
0,61,0,1,1,1,0,0,1,1,0,1,0,1,0,1
0,61,1,0,0,0,1,1,1,0,0,0,1,0,0,1
1,76,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,71,1,1,1,0,1,0,1,1,1,1,0,1,1,1
1,69,0,0,1,0,0,1,0,1,1,1,1,1,0,1
0,56,1,1,1,0,0,1,1,0,0,0,1,0,1,1
1,67,0,0,0,1,0,1,0,1,0,1,1,0,1,1
0,54,1,1,1,0,1,0,0,1,1,0,1,1,1,1
1,63,0,1,0,0,0,1,0,1,1,1,1,0,0,1
0,47,1,1,0,1,1,1,1,1,0,1,1,0,0,1
1,62,1,0,1,0,0,1,0,1,1,1,1,0,1,1
1,65,1,1,1,1,0,1,1,0,0,0,1,1,0,1
0,63,1,1,1,1,1,1,1,1,0,1,1,1,1,1
1,64,0,1,1,1,0,0,1,0,1,0,0,1,1,1
0,65,1,1,1,1,0,1,0,1,0,1,1,1,0,1
1,51,0,1,0,0,1,1,1,1,1,1,1,0,1,1
0,56,0,0,0,1,1,1,0,0,1,1,1,1,0,1
1,70,1,0,0,0,0,1,1,1,1,1,1,0,1,1
1,58,1,0,0,0,0,0,1,1,1,1,0,0,1,1
1,67,1,0,1,0,0,1,1,0,1,1,1,0,1,1
1,62,0,0,0,1,0,1,1,1,1,0,0,1,0,1
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret-key'
from routes import *
if __name__ == '__main__':
app.run(debug=True)
{
"cells": [
{
"cell_type": "markdown",
"id": "e555e9d8",
"metadata": {},
"source": [
"### Importing the dependancies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1123a658",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "markdown",
"id": "4e1ec49f",
"metadata": {},
"source": [
"### Data collecting process"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "111d33c0",
"metadata": {},
"outputs": [
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'C:/Users/Mishane/Downloads/new_model.csv'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-2-b85f22f1af58>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'C://Users//Mishane//Downloads//new_model.csv'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36mread_csv\u001b[1;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)\u001b[0m\n\u001b[0;32m 608\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkwds_defaults\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 609\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 610\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 611\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 612\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m_read\u001b[1;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[0;32m 460\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 461\u001b[0m \u001b[1;31m# Create the parser.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 462\u001b[1;33m \u001b[0mparser\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mTextFileReader\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 463\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 464\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mchunksize\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0miterator\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[0;32m 817\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"has_index_names\"\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"has_index_names\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 818\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 819\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_make_engine\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 820\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 821\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m_make_engine\u001b[1;34m(self, engine)\u001b[0m\n\u001b[0;32m 1048\u001b[0m )\n\u001b[0;32m 1049\u001b[0m \u001b[1;31m# error: Too many arguments for \"ParserBase\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1050\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mmapping\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mengine\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# type: ignore[call-arg]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1051\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1052\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_failover_to_python\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, src, **kwds)\u001b[0m\n\u001b[0;32m 1865\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1866\u001b[0m \u001b[1;31m# open handles\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1867\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_open_handles\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msrc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1868\u001b[0m \u001b[1;32massert\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhandles\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1869\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mkey\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m\"storage_options\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"encoding\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"memory_map\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"compression\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m_open_handles\u001b[1;34m(self, src, kwds)\u001b[0m\n\u001b[0;32m 1360\u001b[0m \u001b[0mLet\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mreaders\u001b[0m \u001b[0mopen\u001b[0m \u001b[0mIOHanldes\u001b[0m \u001b[0mafter\u001b[0m \u001b[0mthey\u001b[0m \u001b[0mare\u001b[0m \u001b[0mdone\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mtheir\u001b[0m \u001b[0mpotential\u001b[0m \u001b[0mraises\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1361\u001b[0m \"\"\"\n\u001b[1;32m-> 1362\u001b[1;33m self.handles = get_handle(\n\u001b[0m\u001b[0;32m 1363\u001b[0m \u001b[0msrc\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1364\u001b[0m \u001b[1;34m\"r\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\common.py\u001b[0m in \u001b[0;36mget_handle\u001b[1;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[0;32m 556\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 557\u001b[0m \u001b[1;31m# open URLs\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 558\u001b[1;33m ioargs = _get_filepath_or_buffer(\n\u001b[0m\u001b[0;32m 559\u001b[0m \u001b[0mpath_or_buf\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 560\u001b[0m \u001b[0mencoding\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mencoding\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\common.py\u001b[0m in \u001b[0;36m_get_filepath_or_buffer\u001b[1;34m(filepath_or_buffer, encoding, compression, mode, storage_options)\u001b[0m\n\u001b[0;32m 331\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 332\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 333\u001b[1;33m file_obj = fsspec.open(\n\u001b[0m\u001b[0;32m 334\u001b[0m \u001b[0mfilepath_or_buffer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mfsspec_mode\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstorage_options\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;33m{\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 335\u001b[0m ).open()\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\fsspec\\core.py\u001b[0m in \u001b[0;36mopen\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 132\u001b[0m \u001b[0mbeen\u001b[0m \u001b[0mdeleted\u001b[0m\u001b[1;33m;\u001b[0m \u001b[0mbut\u001b[0m \u001b[0ma\u001b[0m \u001b[1;32mwith\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mcontext\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mbetter\u001b[0m \u001b[0mstyle\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 133\u001b[0m \"\"\"\n\u001b[1;32m--> 134\u001b[1;33m \u001b[0mout\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__enter__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 135\u001b[0m \u001b[0mcloser\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mout\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 136\u001b[0m \u001b[0mfobjects\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfobjects\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\fsspec\\core.py\u001b[0m in \u001b[0;36m__enter__\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 100\u001b[0m \u001b[0mmode\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreplace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"t\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreplace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"b\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\"b\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 101\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 102\u001b[1;33m \u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 103\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 104\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfobjects\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\fsspec\\spec.py\u001b[0m in \u001b[0;36mopen\u001b[1;34m(self, path, mode, block_size, cache_options, **kwargs)\u001b[0m\n\u001b[0;32m 938\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 939\u001b[0m \u001b[0mac\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"autocommit\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_intrans\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 940\u001b[1;33m f = self._open(\n\u001b[0m\u001b[0;32m 941\u001b[0m \u001b[0mpath\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 942\u001b[0m \u001b[0mmode\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\fsspec\\implementations\\local.py\u001b[0m in \u001b[0;36m_open\u001b[1;34m(self, path, mode, block_size, **kwargs)\u001b[0m\n\u001b[0;32m 116\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mauto_mkdir\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;34m\"w\"\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mmode\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 117\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmakedirs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_parent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mexist_ok\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 118\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mLocalFileOpener\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 119\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 120\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mtouch\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\fsspec\\implementations\\local.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, path, mode, autocommit, fs, **kwargs)\u001b[0m\n\u001b[0;32m 198\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mautocommit\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mautocommit\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 199\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mblocksize\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mio\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mDEFAULT_BUFFER_SIZE\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 200\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_open\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 201\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 202\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_open\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\fsspec\\implementations\\local.py\u001b[0m in \u001b[0;36m_open\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 203\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mf\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclosed\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 204\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mautocommit\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;34m\"w\"\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 205\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 206\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 207\u001b[0m \u001b[1;31m# TODO: check if path is writable?\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'C:/Users/Mishane/Downloads/new_model.csv'"
]
}
],
"source": [
"import pandas as pd\n",
"data = pd.read_csv('C://Users//Mishane//Downloads//new_model.csv')"
]
},
{
"cell_type": "markdown",
"id": "5da5cf75",
"metadata": {},
"source": [
"### Explore the dataset"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "740f14ff",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Bp', 'Sg', 'Al', 'Su', 'Rbc', 'Bu', 'Sc', 'Sod', 'Pot', 'Hemo', 'Wbcc',\n",
" 'Rbcc', 'Htn', 'Class'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Bp</th>\n",
" <th>Sg</th>\n",
" <th>Al</th>\n",
" <th>Su</th>\n",
" <th>Rbc</th>\n",
" <th>Bu</th>\n",
" <th>Sc</th>\n",
" <th>Sod</th>\n",
" <th>Pot</th>\n",
" <th>Hemo</th>\n",
" <th>Wbcc</th>\n",
" <th>Rbcc</th>\n",
" <th>Htn</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>36.0</td>\n",
" <td>1.2</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>15.4</td>\n",
" <td>7800.0</td>\n",
" <td>5.20</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50.0</td>\n",
" <td>1.020</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>0.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.3</td>\n",
" <td>6000.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>53.0</td>\n",
" <td>1.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>9.6</td>\n",
" <td>7500.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>70.0</td>\n",
" <td>1.005</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>56.0</td>\n",
" <td>3.8</td>\n",
" <td>111.00</td>\n",
" <td>2.50</td>\n",
" <td>11.2</td>\n",
" <td>6700.0</td>\n",
" <td>3.90</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>1.4</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.6</td>\n",
" <td>7300.0</td>\n",
" <td>4.60</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Bp Sg Al Su Rbc Bu Sc Sod Pot Hemo Wbcc Rbcc \\\n",
"0 80.0 1.020 1.0 0.0 1.0 36.0 1.2 137.53 4.63 15.4 7800.0 5.20 \n",
"1 50.0 1.020 4.0 0.0 1.0 18.0 0.8 137.53 4.63 11.3 6000.0 4.71 \n",
"2 80.0 1.010 2.0 3.0 1.0 53.0 1.8 137.53 4.63 9.6 7500.0 4.71 \n",
"3 70.0 1.005 4.0 0.0 1.0 56.0 3.8 111.00 2.50 11.2 6700.0 3.90 \n",
"4 80.0 1.010 2.0 0.0 1.0 26.0 1.4 137.53 4.63 11.6 7300.0 4.60 \n",
"\n",
" Htn Class \n",
"0 1.0 1 \n",
"1 0.0 1 \n",
"2 0.0 1 \n",
"3 1.0 1 \n",
"4 0.0 1 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(data.columns)\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7c8d2381",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(400, 14)\n",
" Bp Sg Al Su Rbc Bu \\\n",
"count 400.000000 400.000000 400.000000 400.000000 400.000000 400.00000 \n",
"mean 76.455000 1.017712 1.015000 0.395000 0.882500 57.40550 \n",
"std 13.476536 0.005434 1.272329 1.040038 0.322418 49.28597 \n",
"min 50.000000 1.005000 0.000000 0.000000 0.000000 1.50000 \n",
"25% 70.000000 1.015000 0.000000 0.000000 1.000000 27.00000 \n",
"50% 78.000000 1.020000 1.000000 0.000000 1.000000 44.00000 \n",
"75% 80.000000 1.020000 2.000000 0.000000 1.000000 61.75000 \n",
"max 180.000000 1.025000 5.000000 5.000000 1.000000 391.00000 \n",
"\n",
" Sc Sod Pot Hemo Wbcc \\\n",
"count 400.00000 400.000000 400.000000 400.000000 400.000000 \n",
"mean 3.07235 137.529025 4.627850 12.526900 8406.090000 \n",
"std 5.61749 9.204273 2.819783 2.716171 2523.219976 \n",
"min 0.40000 4.500000 2.500000 3.100000 2200.000000 \n",
"25% 0.90000 135.000000 4.000000 10.875000 6975.000000 \n",
"50% 1.40000 137.530000 4.630000 12.530000 8406.000000 \n",
"75% 3.07000 141.000000 4.800000 14.625000 9400.000000 \n",
"max 76.00000 163.000000 47.000000 17.800000 26400.000000 \n",
"\n",
" Rbcc Htn Class \n",
"count 400.000000 400.000000 400.000000 \n",
"mean 4.708275 0.369350 0.625000 \n",
"std 0.840315 0.482023 0.484729 \n",
"min 2.100000 0.000000 0.000000 \n",
"25% 4.500000 0.000000 0.000000 \n",
"50% 4.710000 0.000000 1.000000 \n",
"75% 5.100000 1.000000 1.000000 \n",
"max 8.000000 1.000000 1.000000 \n"
]
}
],
"source": [
"# Print the shape of the data\n",
"# data = data.sample(frac=0.1, random_state = 48)\n",
"print(data.shape)\n",
"print(data.describe())"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e535ee6f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Bp 0\n",
"Sg 0\n",
"Al 0\n",
"Su 0\n",
"Rbc 0\n",
"Bu 0\n",
"Sc 0\n",
"Sod 0\n",
"Pot 0\n",
"Hemo 0\n",
"Wbcc 0\n",
"Rbcc 0\n",
"Htn 0\n",
"Class 0\n",
"dtype: int64\n"
]
}
],
"source": [
"print(data.isnull().sum())\n",
"\n",
"# Check for null values in a specific column\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d21cf5f8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Bp</th>\n",
" <th>Sg</th>\n",
" <th>Al</th>\n",
" <th>Su</th>\n",
" <th>Rbc</th>\n",
" <th>Bu</th>\n",
" <th>Sc</th>\n",
" <th>Sod</th>\n",
" <th>Pot</th>\n",
" <th>Hemo</th>\n",
" <th>Wbcc</th>\n",
" <th>Rbcc</th>\n",
" <th>Htn</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>36.0</td>\n",
" <td>1.2</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>15.4</td>\n",
" <td>7800.0</td>\n",
" <td>5.20</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50.0</td>\n",
" <td>1.020</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>0.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.3</td>\n",
" <td>6000.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>53.0</td>\n",
" <td>1.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>9.6</td>\n",
" <td>7500.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>70.0</td>\n",
" <td>1.005</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>56.0</td>\n",
" <td>3.8</td>\n",
" <td>111.00</td>\n",
" <td>2.50</td>\n",
" <td>11.2</td>\n",
" <td>6700.0</td>\n",
" <td>3.90</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>1.4</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.6</td>\n",
" <td>7300.0</td>\n",
" <td>4.60</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>395</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>49.0</td>\n",
" <td>0.5</td>\n",
" <td>150.00</td>\n",
" <td>4.90</td>\n",
" <td>15.7</td>\n",
" <td>6700.0</td>\n",
" <td>4.90</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>396</th>\n",
" <td>70.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>31.0</td>\n",
" <td>1.2</td>\n",
" <td>141.00</td>\n",
" <td>3.50</td>\n",
" <td>16.5</td>\n",
" <td>7800.0</td>\n",
" <td>6.20</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>397</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>0.6</td>\n",
" <td>137.00</td>\n",
" <td>4.40</td>\n",
" <td>15.8</td>\n",
" <td>6600.0</td>\n",
" <td>5.40</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>398</th>\n",
" <td>60.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>50.0</td>\n",
" <td>1.0</td>\n",
" <td>135.00</td>\n",
" <td>4.90</td>\n",
" <td>14.2</td>\n",
" <td>7200.0</td>\n",
" <td>5.90</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>399</th>\n",
" <td>80.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>1.1</td>\n",
" <td>141.00</td>\n",
" <td>3.50</td>\n",
" <td>15.8</td>\n",
" <td>6800.0</td>\n",
" <td>6.10</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>400 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" Bp Sg Al Su Rbc Bu Sc Sod Pot Hemo Wbcc Rbcc \\\n",
"0 80.0 1.020 1.0 0.0 1.0 36.0 1.2 137.53 4.63 15.4 7800.0 5.20 \n",
"1 50.0 1.020 4.0 0.0 1.0 18.0 0.8 137.53 4.63 11.3 6000.0 4.71 \n",
"2 80.0 1.010 2.0 3.0 1.0 53.0 1.8 137.53 4.63 9.6 7500.0 4.71 \n",
"3 70.0 1.005 4.0 0.0 1.0 56.0 3.8 111.00 2.50 11.2 6700.0 3.90 \n",
"4 80.0 1.010 2.0 0.0 1.0 26.0 1.4 137.53 4.63 11.6 7300.0 4.60 \n",
".. ... ... ... ... ... ... ... ... ... ... ... ... \n",
"395 80.0 1.020 0.0 0.0 1.0 49.0 0.5 150.00 4.90 15.7 6700.0 4.90 \n",
"396 70.0 1.025 0.0 0.0 1.0 31.0 1.2 141.00 3.50 16.5 7800.0 6.20 \n",
"397 80.0 1.020 0.0 0.0 1.0 26.0 0.6 137.00 4.40 15.8 6600.0 5.40 \n",
"398 60.0 1.025 0.0 0.0 1.0 50.0 1.0 135.00 4.90 14.2 7200.0 5.90 \n",
"399 80.0 1.025 0.0 0.0 1.0 18.0 1.1 141.00 3.50 15.8 6800.0 6.10 \n",
"\n",
" Htn Class \n",
"0 1.0 1 \n",
"1 0.0 1 \n",
"2 0.0 1 \n",
"3 1.0 1 \n",
"4 0.0 1 \n",
".. ... ... \n",
"395 0.0 0 \n",
"396 0.0 0 \n",
"397 0.0 0 \n",
"398 0.0 0 \n",
"399 0.0 0 \n",
"\n",
"[400 rows x 14 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"id": "f0e0e01a",
"metadata": {},
"source": [
"### Checking the distribution of target variable\n"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "dd942b3b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Outlier percentile: 100.0\n",
"Having disease: 250\n",
"Not having disease: 150\n"
]
}
],
"source": [
"# Determine number of fraud cases in dataset\n",
"\n",
"have = data[data['Class'] == 1]\n",
"not_have = data[data['Class'] == 0]\n",
"\n",
"outlier_fraction = 1.6666666666666667\n",
"outlier_fraction = outlier_fraction / np.max(outlier_fraction) * 100\n",
"print(\"Outlier percentile:\", outlier_fraction)\n",
"\n",
"print('Having disease: {}'.format(len(data[data['Class'] == 1])))\n",
"print('Not having disease: {}'.format(len(data[data['Class'] == 0])))"
]
},
{
"cell_type": "markdown",
"id": "4a85a5bb",
"metadata": {},
"source": [
"### Visualizing the dataset"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "cf5c2e23",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x648 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Correlation matrix\n",
"corrmat = data.corr()\n",
"fig = plt.figure(figsize = (12, 9))\n",
"\n",
"sns.heatmap(corrmat, vmax = .8, square = True)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "38ffa726",
"metadata": {},
"source": [
"### Splitting the features and target"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "ad95615d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(400, 13)\n",
"(400,)\n"
]
}
],
"source": [
"#seperating the X and the Y from the dataset\n",
"X=data.drop(['Class'], axis=1)\n",
"Y=data[\"Class\"]\n",
"print(X.shape)\n",
"print(Y.shape)\n",
"#getting just the values for the sake of processing (its a numpy array with no columns)\n",
"X_data=X.values\n",
"Y_data=Y.values"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "987d85cc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[8.000e+01, 1.020e+00, 1.000e+00, ..., 7.800e+03, 5.200e+00,\n",
" 1.000e+00],\n",
" [5.000e+01, 1.020e+00, 4.000e+00, ..., 6.000e+03, 4.710e+00,\n",
" 0.000e+00],\n",
" [8.000e+01, 1.010e+00, 2.000e+00, ..., 7.500e+03, 4.710e+00,\n",
" 0.000e+00],\n",
" ...,\n",
" [8.000e+01, 1.020e+00, 0.000e+00, ..., 6.600e+03, 5.400e+00,\n",
" 0.000e+00],\n",
" [6.000e+01, 1.025e+00, 0.000e+00, ..., 7.200e+03, 5.900e+00,\n",
" 0.000e+00],\n",
" [8.000e+01, 1.025e+00, 0.000e+00, ..., 6.800e+03, 6.100e+00,\n",
" 0.000e+00]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_data"
]
},
{
"cell_type": "markdown",
"id": "ef0afcab",
"metadata": {},
"source": [
"### Splittng data into train and test"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "5c0ce1f4",
"metadata": {},
"outputs": [],
"source": [
"# Using Skicit-learn to split data into training and testing sets\n",
"from sklearn.model_selection import train_test_split\n",
"# Split the data into training and testing sets\n",
"X_train, X_test, Y_train, Y_test = train_test_split(X_data, Y_data, test_size = 0.2, random_state = 42)"
]
},
{
"cell_type": "markdown",
"id": "26033386",
"metadata": {},
"source": [
"### Model training - Random Forest"
]
},
{
"cell_type": "markdown",
"id": "d98c855a",
"metadata": {},
"source": [
"#### ISOLATION FOREST"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "b41d16ee",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import classification_report, accuracy_score,precision_score,recall_score,f1_score,matthews_corrcoef\n",
"from sklearn.metrics import confusion_matrix"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "53a3cd66",
"metadata": {},
"outputs": [],
"source": [
"#Building another model/classifier ISOLATION FOREST\n",
"from sklearn.ensemble import IsolationForest\n",
"ifc=IsolationForest(max_samples=len(X_train),\n",
" contamination=outlier_fraction/100,random_state=1)\n",
"ifc.fit(X_train)\n",
"scores_pred = ifc.decision_function(X_train)\n",
"y_pred = ifc.predict(X_test)\n",
"\n",
"\n",
"# Reshape the prediction values to 0 for valid, 1 for fraud. \n",
"y_pred[y_pred == 1] = 0\n",
"y_pred[y_pred == -1] = 1\n",
"\n",
"n_errors = (y_pred != Y_test).sum()"
]
},
{
"cell_type": "markdown",
"id": "e8dd7a8f",
"metadata": {},
"source": [
"### Model eveuation"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "60c5a8a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"the Model used is Isolation Forest\n",
"The accuracy is 0.9875\n",
"The precision is 1.0\n",
"The recall is 0.9807692307692307\n",
"The F1-Score is 0.9902912621359222\n",
"The Matthews correlation coefficient is0.9731133552274452\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Isolation Forest: 1\n",
"0.9875\n",
" precision recall f1-score support\n",
"\n",
" 0 0.97 1.00 0.98 28\n",
" 1 1.00 0.98 0.99 52\n",
"\n",
" accuracy 0.99 80\n",
" macro avg 0.98 0.99 0.99 80\n",
"weighted avg 0.99 0.99 0.99 80\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 648x504 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#evaluation of the model\n",
"#printing every score of the classifier\n",
"#scoring in any thing\n",
"\n",
"from sklearn.metrics import confusion_matrix\n",
"n_outliers = len(Stroke)\n",
"print(\"the Model used is {}\".format(\"Isolation Forest\"))\n",
"acc= accuracy_score(Y_test,y_pred)\n",
"print(\"The accuracy is {}\".format(acc))\n",
"prec= precision_score(Y_test,y_pred)\n",
"print(\"The precision is {}\".format(prec))\n",
"rec= recall_score(Y_test,y_pred)\n",
"print(\"The recall is {}\".format(rec))\n",
"f1= f1_score(Y_test,y_pred)\n",
"print(\"The F1-Score is {}\".format(f1))\n",
"MCC=matthews_corrcoef(Y_test,y_pred)\n",
"print(\"The Matthews correlation coefficient is{}\".format(MCC))\n",
"\n",
"#printing the confusion matrix\n",
"LABELS = ['No CKD', 'CKD']\n",
"conf_matrix = confusion_matrix(Y_test, y_pred)\n",
"plt.figure(figsize=(12, 12))\n",
"sns.heatmap(conf_matrix, xticklabels=LABELS,\n",
" yticklabels=LABELS, annot=True, fmt=\"d\");\n",
"plt.title(\"Confusion matrix\")\n",
"plt.ylabel('True class')\n",
"plt.xlabel('Predicted class')\n",
"plt.show()\n",
"\n",
"# Run classification metrics\n",
"plt.figure(figsize=(9, 7))\n",
"print('{}: {}'.format(\"Isolation Forest\", n_errors))\n",
"print(accuracy_score(Y_test, y_pred))\n",
"print(classification_report(Y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "5d548aa6",
"metadata": {},
"source": [
"#### Random Forest Classifier"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "c41d3b76",
"metadata": {},
"outputs": [],
"source": [
"# Building the Random Forest Classifier (RANDOM FOREST)\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"# random forest model creation\n",
"rfc = RandomForestClassifier()\n",
"rfc.fit(X_train,Y_train)\n",
"# predictions\n",
"y_pred = rfc.predict(X_test)"
]
},
{
"cell_type": "markdown",
"id": "5821ec3c",
"metadata": {},
"source": [
"### Model eveuation"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "6284b00a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The model used is Random Forest classifier\n",
"The accuracy is 0.9875\n",
"The precision is 1.0\n",
"The recall is 0.9807692307692307\n",
"The F1-Score is 0.9902912621359222\n",
"The Matthews correlation coefficient is 0.9731133552274452\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random Forest: 1\n",
"0.9875\n",
" precision recall f1-score support\n",
"\n",
" 0 0.97 1.00 0.98 28\n",
" 1 1.00 0.98 0.99 52\n",
"\n",
" accuracy 0.99 80\n",
" macro avg 0.98 0.99 0.99 80\n",
"weighted avg 0.99 0.99 0.99 80\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 648x504 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Evaluating the classifier\n",
"#printing every score of the classifier\n",
"#scoring in any thing\n",
"from sklearn.metrics import classification_report, accuracy_score,precision_score,recall_score,f1_score,matthews_corrcoef\n",
"from sklearn.metrics import confusion_matrix\n",
"n_outliers = len(Stroke)\n",
"n_errors = (y_pred != Y_test).sum()\n",
"print(\"The model used is Random Forest classifier\")\n",
"acc= accuracy_score(Y_test,y_pred)\n",
"print(\"The accuracy is {}\".format(acc))\n",
"prec= precision_score(Y_test,y_pred)\n",
"print(\"The precision is {}\".format(prec))\n",
"rec= recall_score(Y_test,y_pred)\n",
"print(\"The recall is {}\".format(rec))\n",
"f1= f1_score(Y_test,y_pred)\n",
"print(\"The F1-Score is {}\".format(f1))\n",
"MCC=matthews_corrcoef(Y_test,y_pred)\n",
"print(\"The Matthews correlation coefficient is {}\".format(MCC))\n",
"\n",
"\n",
"#printing the confusion matrix\n",
"LABELS = ['No CKD', 'CKD']\n",
"conf_matrix = confusion_matrix(Y_test, y_pred)\n",
"plt.figure(figsize=(12, 12))\n",
"sns.heatmap(conf_matrix, xticklabels=LABELS, yticklabels=LABELS, annot=True, fmt=\"d\");\n",
"plt.title(\"Confusion matrix\")\n",
"plt.ylabel('True class')\n",
"plt.xlabel('Predicted class')\n",
"plt.show()\n",
"\n",
"# Run classification metrics\n",
"plt.figure(figsize=(9, 7))\n",
"print('{}: {}'.format(\"Random Forest\", n_errors))\n",
"print(accuracy_score(Y_test, y_pred))\n",
"print(classification_report(Y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "5df8ea16",
"metadata": {},
"source": [
"### Saving the model"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "02faf4e6",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'rfc' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-3-eff0c19026d6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpickle\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mfilename\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'finalized_model_kidney_prediction_RF.sav'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mpickle\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrfc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'wb'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mNameError\u001b[0m: name 'rfc' is not defined"
]
}
],
"source": [
"import pickle\n",
"filename = 'finalized_model_kidney_prediction_RF.sav'\n",
"pickle.dump(rfc, open(filename, 'wb'))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "896159c4",
"metadata": {},
"outputs": [],
"source": [
"with open('finalized_model_kidney_prediction_RF.sav', 'rb') as f:\n",
" model = pickle.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "03d78684",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0]\n"
]
}
],
"source": [
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"#input_data1 = (70,1.02,0,0,1,44,1.2,145,5,14.8,8406,4.71,0) #0\n",
"input_data2 = (80, 1.02, 1, 0, 1, 36, 1.2, 137.53, 4.63, 15.4, 7800, 5.2, 1) #1\n",
"\n",
"#change input data to numpy array\n",
"input_data_as_numpy_array = np.asarray(input_data2)\n",
"\n",
"#reshape the numpy array as we are predicting for only on instance\n",
"\n",
"input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
"\n",
"prediction = model.predict(input_data_reshaped)\n",
"print(prediction)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "41a76901",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
},
"vscode": {
"interpreter": {
"hash": "d9a6414fa631c028c434667d182c0b79dc634ffcd06f52fc304061a2c0b9ef26"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "markdown",
"id": "e555e9d8",
"metadata": {},
"source": [
"### Importing the dependancies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1123a658",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "markdown",
"id": "4e1ec49f",
"metadata": {},
"source": [
"### Data collecting process"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "111d33c0",
"metadata": {},
"outputs": [
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'new_model.csv'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-3-8021350b35bc>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'new_model.csv'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36mread_csv\u001b[1;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)\u001b[0m\n\u001b[0;32m 608\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkwds_defaults\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 609\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 610\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 611\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 612\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m_read\u001b[1;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[0;32m 460\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 461\u001b[0m \u001b[1;31m# Create the parser.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 462\u001b[1;33m \u001b[0mparser\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mTextFileReader\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 463\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 464\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mchunksize\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0miterator\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[0;32m 817\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"has_index_names\"\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"has_index_names\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 818\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 819\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_make_engine\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 820\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 821\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m_make_engine\u001b[1;34m(self, engine)\u001b[0m\n\u001b[0;32m 1048\u001b[0m )\n\u001b[0;32m 1049\u001b[0m \u001b[1;31m# error: Too many arguments for \"ParserBase\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1050\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mmapping\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mengine\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# type: ignore[call-arg]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1051\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1052\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_failover_to_python\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, src, **kwds)\u001b[0m\n\u001b[0;32m 1865\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1866\u001b[0m \u001b[1;31m# open handles\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1867\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_open_handles\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msrc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1868\u001b[0m \u001b[1;32massert\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhandles\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1869\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mkey\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m\"storage_options\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"encoding\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"memory_map\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"compression\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\parsers.py\u001b[0m in \u001b[0;36m_open_handles\u001b[1;34m(self, src, kwds)\u001b[0m\n\u001b[0;32m 1360\u001b[0m \u001b[0mLet\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mreaders\u001b[0m \u001b[0mopen\u001b[0m \u001b[0mIOHanldes\u001b[0m \u001b[0mafter\u001b[0m \u001b[0mthey\u001b[0m \u001b[0mare\u001b[0m \u001b[0mdone\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mtheir\u001b[0m \u001b[0mpotential\u001b[0m \u001b[0mraises\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1361\u001b[0m \"\"\"\n\u001b[1;32m-> 1362\u001b[1;33m self.handles = get_handle(\n\u001b[0m\u001b[0;32m 1363\u001b[0m \u001b[0msrc\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1364\u001b[0m \u001b[1;34m\"r\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\anaconda3\\lib\\site-packages\\pandas\\io\\common.py\u001b[0m in \u001b[0;36mget_handle\u001b[1;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[0;32m 640\u001b[0m \u001b[0merrors\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"replace\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 641\u001b[0m \u001b[1;31m# Encoding\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 642\u001b[1;33m handle = open(\n\u001b[0m\u001b[0;32m 643\u001b[0m \u001b[0mhandle\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 644\u001b[0m \u001b[0mioargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'new_model.csv'"
]
}
],
"source": [
"import pandas as pd\n",
"data = pd.read_csv('new_model.csv')"
]
},
{
"cell_type": "markdown",
"id": "5da5cf75",
"metadata": {},
"source": [
"### Explore the dataset"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "740f14ff",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Bp', 'Sg', 'Al', 'Su', 'Rbc', 'Bu', 'Sc', 'Sod', 'Pot', 'Hemo', 'Wbcc',\n",
" 'Rbcc', 'Htn', 'Class'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Bp</th>\n",
" <th>Sg</th>\n",
" <th>Al</th>\n",
" <th>Su</th>\n",
" <th>Rbc</th>\n",
" <th>Bu</th>\n",
" <th>Sc</th>\n",
" <th>Sod</th>\n",
" <th>Pot</th>\n",
" <th>Hemo</th>\n",
" <th>Wbcc</th>\n",
" <th>Rbcc</th>\n",
" <th>Htn</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>36.0</td>\n",
" <td>1.2</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>15.4</td>\n",
" <td>7800.0</td>\n",
" <td>5.20</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50.0</td>\n",
" <td>1.020</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>0.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.3</td>\n",
" <td>6000.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>53.0</td>\n",
" <td>1.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>9.6</td>\n",
" <td>7500.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>70.0</td>\n",
" <td>1.005</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>56.0</td>\n",
" <td>3.8</td>\n",
" <td>111.00</td>\n",
" <td>2.50</td>\n",
" <td>11.2</td>\n",
" <td>6700.0</td>\n",
" <td>3.90</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>1.4</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.6</td>\n",
" <td>7300.0</td>\n",
" <td>4.60</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Bp Sg Al Su Rbc Bu Sc Sod Pot Hemo Wbcc Rbcc \\\n",
"0 80.0 1.020 1.0 0.0 1.0 36.0 1.2 137.53 4.63 15.4 7800.0 5.20 \n",
"1 50.0 1.020 4.0 0.0 1.0 18.0 0.8 137.53 4.63 11.3 6000.0 4.71 \n",
"2 80.0 1.010 2.0 3.0 1.0 53.0 1.8 137.53 4.63 9.6 7500.0 4.71 \n",
"3 70.0 1.005 4.0 0.0 1.0 56.0 3.8 111.00 2.50 11.2 6700.0 3.90 \n",
"4 80.0 1.010 2.0 0.0 1.0 26.0 1.4 137.53 4.63 11.6 7300.0 4.60 \n",
"\n",
" Htn Class \n",
"0 1.0 1 \n",
"1 0.0 1 \n",
"2 0.0 1 \n",
"3 1.0 1 \n",
"4 0.0 1 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(data.columns)\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7c8d2381",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(400, 14)\n",
" Bp Sg Al Su Rbc Bu \\\n",
"count 400.000000 400.000000 400.000000 400.000000 400.000000 400.00000 \n",
"mean 76.455000 1.017712 1.015000 0.395000 0.882500 57.40550 \n",
"std 13.476536 0.005434 1.272329 1.040038 0.322418 49.28597 \n",
"min 50.000000 1.005000 0.000000 0.000000 0.000000 1.50000 \n",
"25% 70.000000 1.015000 0.000000 0.000000 1.000000 27.00000 \n",
"50% 78.000000 1.020000 1.000000 0.000000 1.000000 44.00000 \n",
"75% 80.000000 1.020000 2.000000 0.000000 1.000000 61.75000 \n",
"max 180.000000 1.025000 5.000000 5.000000 1.000000 391.00000 \n",
"\n",
" Sc Sod Pot Hemo Wbcc \\\n",
"count 400.00000 400.000000 400.000000 400.000000 400.000000 \n",
"mean 3.07235 137.529025 4.627850 12.526900 8406.090000 \n",
"std 5.61749 9.204273 2.819783 2.716171 2523.219976 \n",
"min 0.40000 4.500000 2.500000 3.100000 2200.000000 \n",
"25% 0.90000 135.000000 4.000000 10.875000 6975.000000 \n",
"50% 1.40000 137.530000 4.630000 12.530000 8406.000000 \n",
"75% 3.07000 141.000000 4.800000 14.625000 9400.000000 \n",
"max 76.00000 163.000000 47.000000 17.800000 26400.000000 \n",
"\n",
" Rbcc Htn Class \n",
"count 400.000000 400.000000 400.000000 \n",
"mean 4.708275 0.369350 0.625000 \n",
"std 0.840315 0.482023 0.484729 \n",
"min 2.100000 0.000000 0.000000 \n",
"25% 4.500000 0.000000 0.000000 \n",
"50% 4.710000 0.000000 1.000000 \n",
"75% 5.100000 1.000000 1.000000 \n",
"max 8.000000 1.000000 1.000000 \n"
]
}
],
"source": [
"# Print the shape of the data\n",
"# data = data.sample(frac=0.1, random_state = 48)\n",
"print(data.shape)\n",
"print(data.describe())"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e535ee6f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Bp 0\n",
"Sg 0\n",
"Al 0\n",
"Su 0\n",
"Rbc 0\n",
"Bu 0\n",
"Sc 0\n",
"Sod 0\n",
"Pot 0\n",
"Hemo 0\n",
"Wbcc 0\n",
"Rbcc 0\n",
"Htn 0\n",
"Class 0\n",
"dtype: int64\n"
]
}
],
"source": [
"print(data.isnull().sum())\n",
"\n",
"# Check for null values in a specific column\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d21cf5f8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Bp</th>\n",
" <th>Sg</th>\n",
" <th>Al</th>\n",
" <th>Su</th>\n",
" <th>Rbc</th>\n",
" <th>Bu</th>\n",
" <th>Sc</th>\n",
" <th>Sod</th>\n",
" <th>Pot</th>\n",
" <th>Hemo</th>\n",
" <th>Wbcc</th>\n",
" <th>Rbcc</th>\n",
" <th>Htn</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>36.0</td>\n",
" <td>1.2</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>15.4</td>\n",
" <td>7800.0</td>\n",
" <td>5.20</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50.0</td>\n",
" <td>1.020</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>0.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.3</td>\n",
" <td>6000.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>53.0</td>\n",
" <td>1.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>9.6</td>\n",
" <td>7500.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>70.0</td>\n",
" <td>1.005</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>56.0</td>\n",
" <td>3.8</td>\n",
" <td>111.00</td>\n",
" <td>2.50</td>\n",
" <td>11.2</td>\n",
" <td>6700.0</td>\n",
" <td>3.90</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>1.4</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.6</td>\n",
" <td>7300.0</td>\n",
" <td>4.60</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>395</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>49.0</td>\n",
" <td>0.5</td>\n",
" <td>150.00</td>\n",
" <td>4.90</td>\n",
" <td>15.7</td>\n",
" <td>6700.0</td>\n",
" <td>4.90</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>396</th>\n",
" <td>70.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>31.0</td>\n",
" <td>1.2</td>\n",
" <td>141.00</td>\n",
" <td>3.50</td>\n",
" <td>16.5</td>\n",
" <td>7800.0</td>\n",
" <td>6.20</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>397</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>0.6</td>\n",
" <td>137.00</td>\n",
" <td>4.40</td>\n",
" <td>15.8</td>\n",
" <td>6600.0</td>\n",
" <td>5.40</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>398</th>\n",
" <td>60.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>50.0</td>\n",
" <td>1.0</td>\n",
" <td>135.00</td>\n",
" <td>4.90</td>\n",
" <td>14.2</td>\n",
" <td>7200.0</td>\n",
" <td>5.90</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>399</th>\n",
" <td>80.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>1.1</td>\n",
" <td>141.00</td>\n",
" <td>3.50</td>\n",
" <td>15.8</td>\n",
" <td>6800.0</td>\n",
" <td>6.10</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>400 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" Bp Sg Al Su Rbc Bu Sc Sod Pot Hemo Wbcc Rbcc \\\n",
"0 80.0 1.020 1.0 0.0 1.0 36.0 1.2 137.53 4.63 15.4 7800.0 5.20 \n",
"1 50.0 1.020 4.0 0.0 1.0 18.0 0.8 137.53 4.63 11.3 6000.0 4.71 \n",
"2 80.0 1.010 2.0 3.0 1.0 53.0 1.8 137.53 4.63 9.6 7500.0 4.71 \n",
"3 70.0 1.005 4.0 0.0 1.0 56.0 3.8 111.00 2.50 11.2 6700.0 3.90 \n",
"4 80.0 1.010 2.0 0.0 1.0 26.0 1.4 137.53 4.63 11.6 7300.0 4.60 \n",
".. ... ... ... ... ... ... ... ... ... ... ... ... \n",
"395 80.0 1.020 0.0 0.0 1.0 49.0 0.5 150.00 4.90 15.7 6700.0 4.90 \n",
"396 70.0 1.025 0.0 0.0 1.0 31.0 1.2 141.00 3.50 16.5 7800.0 6.20 \n",
"397 80.0 1.020 0.0 0.0 1.0 26.0 0.6 137.00 4.40 15.8 6600.0 5.40 \n",
"398 60.0 1.025 0.0 0.0 1.0 50.0 1.0 135.00 4.90 14.2 7200.0 5.90 \n",
"399 80.0 1.025 0.0 0.0 1.0 18.0 1.1 141.00 3.50 15.8 6800.0 6.10 \n",
"\n",
" Htn Class \n",
"0 1.0 1 \n",
"1 0.0 1 \n",
"2 0.0 1 \n",
"3 1.0 1 \n",
"4 0.0 1 \n",
".. ... ... \n",
"395 0.0 0 \n",
"396 0.0 0 \n",
"397 0.0 0 \n",
"398 0.0 0 \n",
"399 0.0 0 \n",
"\n",
"[400 rows x 14 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"id": "f0e0e01a",
"metadata": {},
"source": [
"### Checking the distribution of target variable\n"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "dd942b3b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Outlier percentile: 100.0\n",
"Having disease: 250\n",
"Not having disease: 150\n"
]
}
],
"source": [
"# Determine number of fraud cases in dataset\n",
"\n",
"have = data[data['Class'] == 1]\n",
"not_have = data[data['Class'] == 0]\n",
"\n",
"outlier_fraction = 1.6666666666666667\n",
"outlier_fraction = outlier_fraction / np.max(outlier_fraction) * 100\n",
"print(\"Outlier percentile:\", outlier_fraction)\n",
"\n",
"print('Having disease: {}'.format(len(data[data['Class'] == 1])))\n",
"print('Not having disease: {}'.format(len(data[data['Class'] == 0])))"
]
},
{
"cell_type": "markdown",
"id": "4a85a5bb",
"metadata": {},
"source": [
"### Visualizing the dataset"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "cf5c2e23",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x648 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Correlation matrix\n",
"corrmat = data.corr()\n",
"fig = plt.figure(figsize = (12, 9))\n",
"\n",
"sns.heatmap(corrmat, vmax = .8, square = True)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "38ffa726",
"metadata": {},
"source": [
"### Splitting the features and target"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "ad95615d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(400, 13)\n",
"(400,)\n"
]
}
],
"source": [
"#seperating the X and the Y from the dataset\n",
"X=data.drop(['Class'], axis=1)\n",
"Y=data[\"Class\"]\n",
"print(X.shape)\n",
"print(Y.shape)\n",
"#getting just the values for the sake of processing (its a numpy array with no columns)\n",
"X_data=X.values\n",
"Y_data=Y.values"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "987d85cc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[8.000e+01, 1.020e+00, 1.000e+00, ..., 7.800e+03, 5.200e+00,\n",
" 1.000e+00],\n",
" [5.000e+01, 1.020e+00, 4.000e+00, ..., 6.000e+03, 4.710e+00,\n",
" 0.000e+00],\n",
" [8.000e+01, 1.010e+00, 2.000e+00, ..., 7.500e+03, 4.710e+00,\n",
" 0.000e+00],\n",
" ...,\n",
" [8.000e+01, 1.020e+00, 0.000e+00, ..., 6.600e+03, 5.400e+00,\n",
" 0.000e+00],\n",
" [6.000e+01, 1.025e+00, 0.000e+00, ..., 7.200e+03, 5.900e+00,\n",
" 0.000e+00],\n",
" [8.000e+01, 1.025e+00, 0.000e+00, ..., 6.800e+03, 6.100e+00,\n",
" 0.000e+00]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_data"
]
},
{
"cell_type": "markdown",
"id": "ef0afcab",
"metadata": {},
"source": [
"### Splittng data into train and test"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "5c0ce1f4",
"metadata": {},
"outputs": [],
"source": [
"# Using Skicit-learn to split data into training and testing sets\n",
"from sklearn.model_selection import train_test_split\n",
"# Split the data into training and testing sets\n",
"X_train, X_test, Y_train, Y_test = train_test_split(X_data, Y_data, test_size = 0.2, random_state = 42)"
]
},
{
"cell_type": "markdown",
"id": "26033386",
"metadata": {},
"source": [
"### Model training - Random Forest"
]
},
{
"cell_type": "markdown",
"id": "d98c855a",
"metadata": {},
"source": [
"#### ISOLATION FOREST"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "b41d16ee",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import classification_report, accuracy_score,precision_score,recall_score,f1_score,matthews_corrcoef\n",
"from sklearn.metrics import confusion_matrix"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "53a3cd66",
"metadata": {},
"outputs": [],
"source": [
"#Building another model/classifier ISOLATION FOREST\n",
"from sklearn.ensemble import IsolationForest\n",
"ifc=IsolationForest(max_samples=len(X_train),\n",
" contamination=outlier_fraction/100,random_state=1)\n",
"ifc.fit(X_train)\n",
"scores_pred = ifc.decision_function(X_train)\n",
"y_pred = ifc.predict(X_test)\n",
"\n",
"\n",
"# Reshape the prediction values to 0 for valid, 1 for fraud. \n",
"y_pred[y_pred == 1] = 0\n",
"y_pred[y_pred == -1] = 1\n",
"\n",
"n_errors = (y_pred != Y_test).sum()"
]
},
{
"cell_type": "markdown",
"id": "e8dd7a8f",
"metadata": {},
"source": [
"### Model eveuation"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "60c5a8a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"the Model used is Isolation Forest\n",
"The accuracy is 0.9875\n",
"The precision is 1.0\n",
"The recall is 0.9807692307692307\n",
"The F1-Score is 0.9902912621359222\n",
"The Matthews correlation coefficient is0.9731133552274452\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Isolation Forest: 1\n",
"0.9875\n",
" precision recall f1-score support\n",
"\n",
" 0 0.97 1.00 0.98 28\n",
" 1 1.00 0.98 0.99 52\n",
"\n",
" accuracy 0.99 80\n",
" macro avg 0.98 0.99 0.99 80\n",
"weighted avg 0.99 0.99 0.99 80\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 648x504 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#evaluation of the model\n",
"#printing every score of the classifier\n",
"#scoring in any thing\n",
"\n",
"from sklearn.metrics import confusion_matrix\n",
"n_outliers = len(Stroke)\n",
"print(\"the Model used is {}\".format(\"Isolation Forest\"))\n",
"acc= accuracy_score(Y_test,y_pred)\n",
"print(\"The accuracy is {}\".format(acc))\n",
"prec= precision_score(Y_test,y_pred)\n",
"print(\"The precision is {}\".format(prec))\n",
"rec= recall_score(Y_test,y_pred)\n",
"print(\"The recall is {}\".format(rec))\n",
"f1= f1_score(Y_test,y_pred)\n",
"print(\"The F1-Score is {}\".format(f1))\n",
"MCC=matthews_corrcoef(Y_test,y_pred)\n",
"print(\"The Matthews correlation coefficient is{}\".format(MCC))\n",
"\n",
"#printing the confusion matrix\n",
"LABELS = ['No CKD', 'CKD']\n",
"conf_matrix = confusion_matrix(Y_test, y_pred)\n",
"plt.figure(figsize=(12, 12))\n",
"sns.heatmap(conf_matrix, xticklabels=LABELS,\n",
" yticklabels=LABELS, annot=True, fmt=\"d\");\n",
"plt.title(\"Confusion matrix\")\n",
"plt.ylabel('True class')\n",
"plt.xlabel('Predicted class')\n",
"plt.show()\n",
"\n",
"# Run classification metrics\n",
"plt.figure(figsize=(9, 7))\n",
"print('{}: {}'.format(\"Isolation Forest\", n_errors))\n",
"print(accuracy_score(Y_test, y_pred))\n",
"print(classification_report(Y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "5d548aa6",
"metadata": {},
"source": [
"#### Random Forest Classifier"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "c41d3b76",
"metadata": {},
"outputs": [],
"source": [
"# Building the Random Forest Classifier (RANDOM FOREST)\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"# random forest model creation\n",
"rfc = RandomForestClassifier()\n",
"rfc.fit(X_train,Y_train)\n",
"# predictions\n",
"y_pred = rfc.predict(X_test)"
]
},
{
"cell_type": "markdown",
"id": "5821ec3c",
"metadata": {},
"source": [
"### Model eveuation"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "6284b00a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The model used is Random Forest classifier\n",
"The accuracy is 0.9875\n",
"The precision is 1.0\n",
"The recall is 0.9807692307692307\n",
"The F1-Score is 0.9902912621359222\n",
"The Matthews correlation coefficient is 0.9731133552274452\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random Forest: 1\n",
"0.9875\n",
" precision recall f1-score support\n",
"\n",
" 0 0.97 1.00 0.98 28\n",
" 1 1.00 0.98 0.99 52\n",
"\n",
" accuracy 0.99 80\n",
" macro avg 0.98 0.99 0.99 80\n",
"weighted avg 0.99 0.99 0.99 80\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 648x504 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Evaluating the classifier\n",
"#printing every score of the classifier\n",
"#scoring in any thing\n",
"from sklearn.metrics import classification_report, accuracy_score,precision_score,recall_score,f1_score,matthews_corrcoef\n",
"from sklearn.metrics import confusion_matrix\n",
"n_outliers = len(Stroke)\n",
"n_errors = (y_pred != Y_test).sum()\n",
"print(\"The model used is Random Forest classifier\")\n",
"acc= accuracy_score(Y_test,y_pred)\n",
"print(\"The accuracy is {}\".format(acc))\n",
"prec= precision_score(Y_test,y_pred)\n",
"print(\"The precision is {}\".format(prec))\n",
"rec= recall_score(Y_test,y_pred)\n",
"print(\"The recall is {}\".format(rec))\n",
"f1= f1_score(Y_test,y_pred)\n",
"print(\"The F1-Score is {}\".format(f1))\n",
"MCC=matthews_corrcoef(Y_test,y_pred)\n",
"print(\"The Matthews correlation coefficient is {}\".format(MCC))\n",
"\n",
"\n",
"#printing the confusion matrix\n",
"LABELS = ['No CKD', 'CKD']\n",
"conf_matrix = confusion_matrix(Y_test, y_pred)\n",
"plt.figure(figsize=(12, 12))\n",
"sns.heatmap(conf_matrix, xticklabels=LABELS, yticklabels=LABELS, annot=True, fmt=\"d\");\n",
"plt.title(\"Confusion matrix\")\n",
"plt.ylabel('True class')\n",
"plt.xlabel('Predicted class')\n",
"plt.show()\n",
"\n",
"# Run classification metrics\n",
"plt.figure(figsize=(9, 7))\n",
"print('{}: {}'.format(\"Random Forest\", n_errors))\n",
"print(accuracy_score(Y_test, y_pred))\n",
"print(classification_report(Y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "5df8ea16",
"metadata": {},
"source": [
"### Saving the model"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "02faf4e6",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'rfc' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-3-eff0c19026d6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpickle\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mfilename\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'finalized_model_kidney_prediction_RF.sav'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mpickle\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrfc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'wb'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mNameError\u001b[0m: name 'rfc' is not defined"
]
}
],
"source": [
"import pickle\n",
"filename = 'finalized_model_kidney_prediction_RF.sav'\n",
"pickle.dump(rfc, open(filename, 'wb'))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "896159c4",
"metadata": {},
"outputs": [],
"source": [
"with open('finalized_model_kidney_prediction_RF.sav', 'rb') as f:\n",
" model = pickle.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "03d78684",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0]\n"
]
}
],
"source": [
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"#input_data1 = (70,1.02,0,0,1,44,1.2,145,5,14.8,8406,4.71,0) #0\n",
"input_data2 = (80, 1.02, 1, 0, 1, 36, 1.2, 137.53, 4.63, 15.4, 7800, 5.2, 1) #1\n",
"\n",
"#change input data to numpy array\n",
"input_data_as_numpy_array = np.asarray(input_data2)\n",
"\n",
"#reshape the numpy array as we are predicting for only on instance\n",
"\n",
"input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
"\n",
"prediction = model.predict(input_data_reshaped)\n",
"print(prediction)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "41a76901",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
},
"vscode": {
"interpreter": {
"hash": "d9a6414fa631c028c434667d182c0b79dc634ffcd06f52fc304061a2c0b9ef26"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
{
"cells": [
{
"cell_type": "markdown",
"id": "e555e9d8",
"metadata": {},
"source": [
"### Importing the dependancies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1123a658",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "markdown",
"id": "4e1ec49f",
"metadata": {},
"source": [
"### Data collecting process"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "111d33c0",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"data = pd.read_csv('new_model.csv')"
]
},
{
"cell_type": "markdown",
"id": "5da5cf75",
"metadata": {},
"source": [
"### Explore the dataset"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "740f14ff",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Bp', 'Sg', 'Al', 'Su', 'Rbc', 'Bu', 'Sc', 'Sod', 'Pot', 'Hemo', 'Wbcc',\n",
" 'Rbcc', 'Htn', 'Class'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Bp</th>\n",
" <th>Sg</th>\n",
" <th>Al</th>\n",
" <th>Su</th>\n",
" <th>Rbc</th>\n",
" <th>Bu</th>\n",
" <th>Sc</th>\n",
" <th>Sod</th>\n",
" <th>Pot</th>\n",
" <th>Hemo</th>\n",
" <th>Wbcc</th>\n",
" <th>Rbcc</th>\n",
" <th>Htn</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>36.0</td>\n",
" <td>1.2</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>15.4</td>\n",
" <td>7800.0</td>\n",
" <td>5.20</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50.0</td>\n",
" <td>1.020</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>0.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.3</td>\n",
" <td>6000.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>53.0</td>\n",
" <td>1.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>9.6</td>\n",
" <td>7500.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>70.0</td>\n",
" <td>1.005</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>56.0</td>\n",
" <td>3.8</td>\n",
" <td>111.00</td>\n",
" <td>2.50</td>\n",
" <td>11.2</td>\n",
" <td>6700.0</td>\n",
" <td>3.90</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>1.4</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.6</td>\n",
" <td>7300.0</td>\n",
" <td>4.60</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Bp Sg Al Su Rbc Bu Sc Sod Pot Hemo Wbcc Rbcc \\\n",
"0 80.0 1.020 1.0 0.0 1.0 36.0 1.2 137.53 4.63 15.4 7800.0 5.20 \n",
"1 50.0 1.020 4.0 0.0 1.0 18.0 0.8 137.53 4.63 11.3 6000.0 4.71 \n",
"2 80.0 1.010 2.0 3.0 1.0 53.0 1.8 137.53 4.63 9.6 7500.0 4.71 \n",
"3 70.0 1.005 4.0 0.0 1.0 56.0 3.8 111.00 2.50 11.2 6700.0 3.90 \n",
"4 80.0 1.010 2.0 0.0 1.0 26.0 1.4 137.53 4.63 11.6 7300.0 4.60 \n",
"\n",
" Htn Class \n",
"0 1.0 1 \n",
"1 0.0 1 \n",
"2 0.0 1 \n",
"3 1.0 1 \n",
"4 0.0 1 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(data.columns)\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "7c8d2381",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(400, 14)\n",
" Bp Sg Al Su Rbc Bu \\\n",
"count 400.000000 400.000000 400.000000 400.000000 400.000000 400.00000 \n",
"mean 76.455000 1.017712 1.015000 0.395000 0.882500 57.40550 \n",
"std 13.476536 0.005434 1.272329 1.040038 0.322418 49.28597 \n",
"min 50.000000 1.005000 0.000000 0.000000 0.000000 1.50000 \n",
"25% 70.000000 1.015000 0.000000 0.000000 1.000000 27.00000 \n",
"50% 78.000000 1.020000 1.000000 0.000000 1.000000 44.00000 \n",
"75% 80.000000 1.020000 2.000000 0.000000 1.000000 61.75000 \n",
"max 180.000000 1.025000 5.000000 5.000000 1.000000 391.00000 \n",
"\n",
" Sc Sod Pot Hemo Wbcc \\\n",
"count 400.00000 400.000000 400.000000 400.000000 400.000000 \n",
"mean 3.07235 137.529025 4.627850 12.526900 8406.090000 \n",
"std 5.61749 9.204273 2.819783 2.716171 2523.219976 \n",
"min 0.40000 4.500000 2.500000 3.100000 2200.000000 \n",
"25% 0.90000 135.000000 4.000000 10.875000 6975.000000 \n",
"50% 1.40000 137.530000 4.630000 12.530000 8406.000000 \n",
"75% 3.07000 141.000000 4.800000 14.625000 9400.000000 \n",
"max 76.00000 163.000000 47.000000 17.800000 26400.000000 \n",
"\n",
" Rbcc Htn Class \n",
"count 400.000000 400.000000 400.000000 \n",
"mean 4.708275 0.369350 0.625000 \n",
"std 0.840315 0.482023 0.484729 \n",
"min 2.100000 0.000000 0.000000 \n",
"25% 4.500000 0.000000 0.000000 \n",
"50% 4.710000 0.000000 1.000000 \n",
"75% 5.100000 1.000000 1.000000 \n",
"max 8.000000 1.000000 1.000000 \n"
]
}
],
"source": [
"# Print the shape of the data\n",
"# data = data.sample(frac=0.1, random_state = 48)\n",
"print(data.shape)\n",
"print(data.describe())"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "e535ee6f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Bp 0\n",
"Sg 0\n",
"Al 0\n",
"Su 0\n",
"Rbc 0\n",
"Bu 0\n",
"Sc 0\n",
"Sod 0\n",
"Pot 0\n",
"Hemo 0\n",
"Wbcc 0\n",
"Rbcc 0\n",
"Htn 0\n",
"Class 0\n",
"dtype: int64\n"
]
}
],
"source": [
"print(data.isnull().sum())\n",
"\n",
"# Check for null values in a specific column\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "d21cf5f8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Bp</th>\n",
" <th>Sg</th>\n",
" <th>Al</th>\n",
" <th>Su</th>\n",
" <th>Rbc</th>\n",
" <th>Bu</th>\n",
" <th>Sc</th>\n",
" <th>Sod</th>\n",
" <th>Pot</th>\n",
" <th>Hemo</th>\n",
" <th>Wbcc</th>\n",
" <th>Rbcc</th>\n",
" <th>Htn</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>36.0</td>\n",
" <td>1.2</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>15.4</td>\n",
" <td>7800.0</td>\n",
" <td>5.20</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50.0</td>\n",
" <td>1.020</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>0.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.3</td>\n",
" <td>6000.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>53.0</td>\n",
" <td>1.8</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>9.6</td>\n",
" <td>7500.0</td>\n",
" <td>4.71</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>70.0</td>\n",
" <td>1.005</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>56.0</td>\n",
" <td>3.8</td>\n",
" <td>111.00</td>\n",
" <td>2.50</td>\n",
" <td>11.2</td>\n",
" <td>6700.0</td>\n",
" <td>3.90</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>80.0</td>\n",
" <td>1.010</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>1.4</td>\n",
" <td>137.53</td>\n",
" <td>4.63</td>\n",
" <td>11.6</td>\n",
" <td>7300.0</td>\n",
" <td>4.60</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>395</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>49.0</td>\n",
" <td>0.5</td>\n",
" <td>150.00</td>\n",
" <td>4.90</td>\n",
" <td>15.7</td>\n",
" <td>6700.0</td>\n",
" <td>4.90</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>396</th>\n",
" <td>70.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>31.0</td>\n",
" <td>1.2</td>\n",
" <td>141.00</td>\n",
" <td>3.50</td>\n",
" <td>16.5</td>\n",
" <td>7800.0</td>\n",
" <td>6.20</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>397</th>\n",
" <td>80.0</td>\n",
" <td>1.020</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>26.0</td>\n",
" <td>0.6</td>\n",
" <td>137.00</td>\n",
" <td>4.40</td>\n",
" <td>15.8</td>\n",
" <td>6600.0</td>\n",
" <td>5.40</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>398</th>\n",
" <td>60.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>50.0</td>\n",
" <td>1.0</td>\n",
" <td>135.00</td>\n",
" <td>4.90</td>\n",
" <td>14.2</td>\n",
" <td>7200.0</td>\n",
" <td>5.90</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>399</th>\n",
" <td>80.0</td>\n",
" <td>1.025</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>18.0</td>\n",
" <td>1.1</td>\n",
" <td>141.00</td>\n",
" <td>3.50</td>\n",
" <td>15.8</td>\n",
" <td>6800.0</td>\n",
" <td>6.10</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>400 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" Bp Sg Al Su Rbc Bu Sc Sod Pot Hemo Wbcc Rbcc \\\n",
"0 80.0 1.020 1.0 0.0 1.0 36.0 1.2 137.53 4.63 15.4 7800.0 5.20 \n",
"1 50.0 1.020 4.0 0.0 1.0 18.0 0.8 137.53 4.63 11.3 6000.0 4.71 \n",
"2 80.0 1.010 2.0 3.0 1.0 53.0 1.8 137.53 4.63 9.6 7500.0 4.71 \n",
"3 70.0 1.005 4.0 0.0 1.0 56.0 3.8 111.00 2.50 11.2 6700.0 3.90 \n",
"4 80.0 1.010 2.0 0.0 1.0 26.0 1.4 137.53 4.63 11.6 7300.0 4.60 \n",
".. ... ... ... ... ... ... ... ... ... ... ... ... \n",
"395 80.0 1.020 0.0 0.0 1.0 49.0 0.5 150.00 4.90 15.7 6700.0 4.90 \n",
"396 70.0 1.025 0.0 0.0 1.0 31.0 1.2 141.00 3.50 16.5 7800.0 6.20 \n",
"397 80.0 1.020 0.0 0.0 1.0 26.0 0.6 137.00 4.40 15.8 6600.0 5.40 \n",
"398 60.0 1.025 0.0 0.0 1.0 50.0 1.0 135.00 4.90 14.2 7200.0 5.90 \n",
"399 80.0 1.025 0.0 0.0 1.0 18.0 1.1 141.00 3.50 15.8 6800.0 6.10 \n",
"\n",
" Htn Class \n",
"0 1.0 1 \n",
"1 0.0 1 \n",
"2 0.0 1 \n",
"3 1.0 1 \n",
"4 0.0 1 \n",
".. ... ... \n",
"395 0.0 0 \n",
"396 0.0 0 \n",
"397 0.0 0 \n",
"398 0.0 0 \n",
"399 0.0 0 \n",
"\n",
"[400 rows x 14 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"id": "f0e0e01a",
"metadata": {},
"source": [
"### Checking the distribution of target variable\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "dd942b3b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Outlier percentile: 100.0\n",
"Having disease: 250\n",
"Not having disease: 150\n"
]
}
],
"source": [
"# Determine number of fraud cases in dataset\n",
"\n",
"have = data[data['Class'] == 1]\n",
"not_have = data[data['Class'] == 0]\n",
"\n",
"outlier_fraction = 1.6666666666666667\n",
"outlier_fraction = outlier_fraction / np.max(outlier_fraction) * 100\n",
"print(\"Outlier percentile:\", outlier_fraction)\n",
"\n",
"print('Having disease: {}'.format(len(data[data['Class'] == 1])))\n",
"print('Not having disease: {}'.format(len(data[data['Class'] == 0])))"
]
},
{
"cell_type": "markdown",
"id": "4a85a5bb",
"metadata": {},
"source": [
"### Visualizing the dataset"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "cf5c2e23",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAIMCAYAAAC9n3vPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA1vElEQVR4nO3deZwsdX3v/9ebAwiyKUKUVVBxF1DBPWiCGOQaUWMUt7jmyI1iJMYb1J9b/PmIidFoXILHFXMTV0TBSxBFQYygHAOyiCiCCmHx4gKyCJwzn/tH1zTtODPd58xUVzP9ep5HPU5XdXXXe3q6Z77z+X7rW6kqJEmSNF6bdB1AkiRpGtkIkyRJ6oCNMEmSpA7YCJMkSeqAjTBJkqQO2AiTJEnqgI0wSZI09ZIcnOSiJBcnOWqe+7dLckKS7ya5IMkLl3xM5wmTJEnTLMkq4AfAQcDlwFnAs6rqewP7vBbYrqr+JsmOwEXA3arqlo09rpUwSZI07R4GXFxVlzSNqk8Ch87Zp4BtkgTYGvgFsG4pB7URJkmSpt0uwGUD65c32wa9F7gfcAVwHvCXVTWzlINuupQHj+LWay6ZmP7ODzz4DV1H6HvyXa/sOkLfHbZe33UEAI770a5dR+h7yp6Xdx2h75YbV3Udoe/0K3bqOkLf3ne4tusIfcfU1l1H6PvTW27uOkLfVzbbsusIfS971BVdR+jLFpPzmd7uo19J1xmg/bbC5jve86XA6oFNa6pqzcD6fK/D3Ex/BJwD/CFwT+DLSU6vqus2NlfrjTBJkqQuNQ2uNYvscjmw28D6rvQqXoNeCLyteoPpL05yKXBf4Nsbm8tGmCRJ6tZM5z0yZwF7JdkT+G/gMODZc/b5KXAgcHqSuwL3AS5ZykFthEmSpKlWVeuSvBz4ErAK+EhVXZDk8Ob+o4G3AB9Lch697su/qaprlnJcG2GSJKlbSxvfvjwRqk4ETpyz7eiB21cAT1jOY3p2pCRJUgeshEmSpG7NdF8J64KVMEmSpA5YCZMkSZ1a4pynt1tWwiRJkjpgJUySJHXLMWGSJEkaFythkiSpW1M6JsxGmCRJ6lb3ly3qhN2RkiRJHbASJkmSumV35OKSPA14DFDAN6rquNZSSZIkrXAjdUcmeT9wOHAecD7w0iTvW2T/1UnWJln7oY9/YnmSSpKklWlmpt1lQo1aCXss8MCqKoAkx9BrkM2rqtYAawBuveaSWmpISZKklWbURthFwO7AT5r13YBzW0kkSZKmyrRetmjURthdgAuTfLtZ3x84I8nxAFX15DbCSZIkrVSjNsLe0GoKSZI0vSZ43FabRmqEVdVps7eT7AD8fHZ8mCRJkjbcomdHJnlEklOTfC7Jg5OcT+/syKuTHDyeiJIkaUWrmXaXCTWsEvZe4LXAdsBXgSdW1ZlJ7gt8Ajip5XySJEkr0rBG2KZVdTJAkr+tqjMBqur7SVoPJ0mSpoDXjpzXYA3vpjn3OSZMkiRpIw2rhO2T5DogwJbNbZr1LVpNJkmSpsMEj9tq06KNsKpaNa4gkiRJ02TkC3hLkiS1YkrnCRvpAt6SJElaXlbCJElSt6Z0TJiVMEmSpA5YCZMkSd2a0jFhrTfCPvDgybn290vP/tuuI/QdvO/hXUfo23vTHbuOAMAbHnF51xH63nHWzl1H6NtxZnIK1s/Z57KuI/T959m7dB2h7y1vnZz3y7v/9qquI/QdeeRWXUfoe9W7JuPnHMCnfn521xH6fvHRrhP0VDlZqyRJksbE7khJktQtB+ZLkiRpXKyESZKkbk3pwHwrYZIkSR2wEiZJkrrlmDBJkiSNi5UwSZLUrRnnCZMkSdKYWAmTJEndckyYJEmSxsVKmCRJ6pbzhEmSJGlcrIRJkqRuOSZMkiRJ42IlTJIkdWtKx4SN1AhLcgJQczZfC6wFPlBVv1nuYJIkSSvZqN2RlwDXAx9sluuAq4F7N+u/JcnqJGuTrP3P63+4XFklSdJKNDPT7jKhRu2OfHBVHTCwfkKSr1fVAUkumLtzVa0B1gC8d7fnzq2gSZIkTb1RG2E7Jtm9qn4KkOTuwI7Nfbe0kkySJE2Fqum8duSojbBXAd9I8qNm/R7AXyTZCjimlWSSJGk6THCXYZsWHROWZP8kd6uqE4G9gM8DvwZOBs6oqhuq6l2tp5QkSVphhg3M/wC3dTc+HPgbepWvq2jGfEmSJC1JzbS7TKhh3ZGrquoXze1nAmuq6ljg2CTntJpMkiRpBRvaCEuyaVWtAw4EVm/AYyVJkoZzTNi8PgGcluQLwE3A6QBJ7kVvslZJkqTbvSQHJ7koycVJjlpgn8clOSfJBUlOW+oxF61mVdVbk5wC7AScXFWzc35tAhyx1INLkiR1PW4rySrgfcBBwOXAWUmOr6rvDexzJ+D9wMFV9dMkv7fU4w7tUqyqM+fZ9oOlHliSJGlCPAy4uKouAUjySeBQ4HsD+zwb+NzsnKlV9bOlHtRxXZIkqVvdjwnbBbhsYP1yerNCDLo3sFmSU4FtgHdX1ceXclAbYZIkaUVLsprfPrlwTXOJxf4u8zxs7mUXNwUeSu9ExS2BM5KcuZTeQRthkiSpWy2PCRu8pvUCLgd2G1jfFbhinn2uqaobgBuSfB3YB9joRtiwsyMlSZJWurOAvZLsmWRz4DDg+Dn7fAH4/SSbJrkjve7KC5dyUCthkiSpWx2PCauqdUleDnwJWAV8pKouSHJ4c//RVXVhkpOAc4EZ4ENVdf5SjmsjTJIkTb3mOtknztl29Jz1twNvX65jtt4Ie/Jdr2z7ECM7eN/Du47Qd9I5Rw/faUxuOOLFXUcA4C++eeeuI/R98M8np6f+N9+6bPhOY/L35+3cdYS+l+7w864j9D38dZd2HaHvKw/YvOsIfU95x5ZdR+j7/Ovv13WEvnfu8biuI0ye7s+O7MTk/KaRJEmaInZHSpKkbnU8Y35XrIRJkiR1wEqYJEnqlmPCJEmSNC5WwiRJUrccEyZJkqRxsRImSZK6NaVjwmyESZKkbtkdKUmSpHGxEiZJkro1pd2RVsIkSZI6YCVMkiR1y0qYJEmSxsVKmCRJ6lZV1wk6YSVMkiSpAwtWwpKcB8zXNA0wU1X7tJZKkiRNjykdE7ZYd+ST5tkWYFfgtYs9aZLVwGqAv9v9Pjx7x102OqAkSdJKtGAjrKp+Mns7yb7As4FnAJcCxy72pFW1BlgD8NP9DpzOjl5JkjQaK2G/Lcm9gcOAZwE/Bz4FpKr+YEzZJEmSVqzFuiO/D5wO/HFVXQyQ5MixpJIkSdPDa0f+jj8BrgK+luSDSQ6kNyZMkiRJS7TYmLDjgOOSbAU8BTgSuGuSfwGOq6qTxxNRkiStaFM6JmzoPGFVdUNV/VtVPYnemZHnAEe1HUySJGkl26AZ86vqF8AHmkWSJGnpnDFfkiRJ4+K1IyVJUrccEyZJkqRxsRImSZK6NaWVMBthkiSpW07WKkmSpHGxEiZJkjpVM05RIUmSpDGxEiZJkrrlwPx23GHr9W0fYmR7b7pj1xH6bjjixV1H6NvqPR/uOgIAhz7o9V1H6PvZZ67uOkLfzTdt1XWEvsfe1HWC22y1+81dR+g7/Np7dh2h75brr+g6Qt+T2aHrCH03f/nsriP0rdr2/K4j9G35hL/oOsJUsxImSZK65dmRkiRJGhcrYZIkqVueHSlJkqRxsRImSZK6NaVnR1oJkyRJ6oCVMEmS1C0rYZIkSRoXK2GSJKlb5dmRkiRJGhMrYZIkqVuOCZMkSdK4WAmTJEndcsZ8SZIkjYuVMEmS1K2azjFhNsIkSVK3prQ7cqRGWJKvAb/zClXVHy57IkmSpCkwaiXsrwdubwH8CbBuoZ2TrAZWA7x9r7143s47b3RASZK0stWUTlExUiOsqr4zZ9N/Jjltkf3XAGsArn7c46azxihJkrSIkc6OTLL9wLJDkoOBu7WcTZIkTYOZancZQZKDk1yU5OIkRy2y3/5J1id5+lK/7FG7I7/DbWPC1gE/Bl681INLkiR1Lckq4H3AQcDlwFlJjq+q782z398DX1qO4y7aCEuyP3BZVe3ZrD+f3niwHwPfW+ShkiRJo+l+ioqHARdX1SUAST4JHMrvtnWOAI4F9l+Ogw7rjvwAcEsT6ADg74BjgGtpxnxJkiTdzu0CXDawfnmzrS/JLsBTgaOX66DDuiNXVdUvmtvPBNZU1bHAsUnOWa4QkiRpirU8T9jgrA2NNc1JhP1d5nnY3FDvAv6mqtYn8+2+4YY2wpJsWlXrgAP57S/AiV4lSdLEG5y1YQGXA7sNrO8KXDFnn/2ATzYNsB2AQ5Ksq6rPb2yuYQ2pTwCnJbkGuAk4HSDJveh1SUqSJC1N9/OEnQXslWRP4L+Bw4BnD+4wOz4eIMnHgC8upQEGQxphVfXWJKcAOwEnV9VsaW4TeoPTJEmSbteqal2Sl9M763EV8JGquiDJ4c39yzYObNDQLsWqOnOebT9oI4wkSZpCE3DtyKo6EThxzrZ5G19V9YLlOOZIk7VKkiRpeTm4XpIkdav7ecI6YSVMkiSpA1bCJElStyZgTFgXrIRJkiR1wEqYJEnqVHU/T1gnWm+EHfejXds+xMje8IjLu47Q9xffvHPXEfoOfdDru44AwNPOe0vXEfre+tDJeE0Adlm/PJfHWA5P2OWqriP0/fji7buO0Pecg67sOkLfd790l64j9D3jAZcN32lMPnvGbsN3GpMLN13XdYS+d3YdYMpZCZMkSd2a0jFhNsIkSVK3prQR5sB8SZKkDlgJkyRJ3XKyVkmSJI2LlTBJktQtx4RJkiRpXKyESZKkTpWVMEmSJI2LlTBJktQtK2GSJEkaFythkiSpW1N6AW8rYZIkSR2wEiZJkrrlmDBJkiSNi5UwSZLULSthC0vy5SR3Gli/c5IvtZZKkiRphRu1O3KHqvrV7EpV/RL4vYV2TrI6ydoka0+//odLjChJklayqmp1mVSjNsJmkuw+u5Lk7sCCX1VVramq/apqv9/feq+lZpQkSVpxRh0T9jrgG0lOa9YPAFa3E0mSJE2VKR0TNlIjrKpOSvIQ4BHNpiOr6pr2YkmSJK1sG3J25AHAY+h1Q24GHNdKIkmSNF2mtBI26tmR7wcOB84DzgdemuR9bQaTJElayUathD0WeGA1pxgkOYZeg0ySJGlJakorYaM2wi4Cdgd+0qzvBpzbSiJJkjRdbIT9riQn0BsDth1wYZJvN+sPB77ZfjxJkqSVaVgl7B/HkkKSJE2vma4DdGPRRlhVnTbf9iSrgMNaSSRJkjQFFj07Msm2SV6T5L1JnpCelwOXAM8YT0RJkrSS1Uy1ukyqYd2R/wr8EjgDeAnwamBz4NCqOqfdaJIkSSvXsEbYParqQQBJPgRcA+xeVb9uPZkkSZoOE1ytatOwyVpvnb1RVeuBS22ASZIkLd2wStg+Sa5rbgfYslkPUFW1bavpJEnSyufZkb+rqlaNK4gkSdI02ZALeG+Up+x5eduHGNk7ztq56wh9H/zzkS7bORY/+8zVXUcA4K0PfX3XEfpe9523dB2hb923ju86Qt+rX3ZG1xH6/u4ZN3Ydoe8xn7yp6wh9H93slq4j9D3rojt0HaHv+Bet6zrCbdav7zrBxJnkMxjbNDktAUmSpCnSeiVMkiRpUVM6JsxKmCRJUgeshEmSpE45JkySJEljYyVMkiR1yzFhkiRJGhcrYZIkqVNlJUySJEnjYiVMkiR1a0orYTbCJElSp+yOlCRJ0thYCZMkSd2yEiZJkjSdkhyc5KIkFyc5ap77n5Pk3Gb5ZpJ9lnpMK2GSJKlTXY8JS7IKeB9wEHA5cFaS46vqewO7XQo8tqp+meSJwBrg4Us5rpUwSZI07R4GXFxVl1TVLcAngUMHd6iqb1bVL5vVM4Fdl3rQkSphSf5svu1V9fGlBpAkSdOt7UpYktXA6oFNa6pqzcD6LsBlA+uXs3iV68XAfyw116jdkfsP3N4COBD4L2DeRtjgF/sP99qL5+2081IySpIkbbSmwbVmkV0y38Pm3TH5A3qNsMcsNddIjbCqOmJOgO2Af11k//4Xe9UBj5v3i5AkSYLux4TRq3ztNrC+K3DF3J2S7A18CHhiVf18qQfd2DFhNwJ7LfXgkiRJE+AsYK8keybZHDgMOH5whyS7A58DnldVP1iOg446JuwEbivLbQLcH/j0cgSQJElTrubrDRzj4avWJXk58CVgFfCRqrogyeHN/UcDbwDuArw/CcC6qtpvKccddUzYPw7cXgf8pKouX8qBJUmSJkVVnQicOGfb0QO3XwK8ZDmPOeqYsNNmbyfZAVhyP6gkSRJMxJiwTiw6JizJI5KcmuRzSR6c5HzgfODqJAePJ6IkSdLKM6wS9l7gtcB2wFfpnQ1wZpL7Ap8ATmo5nyRJWuFqptsxYV0ZdnbkplV1clV9Briqqs4EqKrvtx9NkiRp5RpWCRvspb1pzn3O/yVJkpZsWseEDWuE7ZPkOnozyW7Z3KZZ36LVZJIkSSvYoo2wqlo1riCSJGk6VcfzhHVlY2fMlyRJ0hKMOlmrJElSKxwTJkmS1AGnqJAkSdLYWAmTJEmdqimd9Kr1RtgtN07OCZY7zkxO4e8337qs6wh9N9+0VdcRANhl/eSUo9d96/iuI/Rt+vAndx2h77hrP9h1hL43XrBD1xH6HrrFzl1H6Lv+N5PzObr3FnfoOkLfrT/6WdcR+jbZYnJ+L6pbVsIkSVKnHBMmSZKksbESJkmSOmUlTJIkSWNjJUySJHVqWs+OtBImSZLUASthkiSpU44JkyRJ0thYCZMkSZ2qshImSZKkMbESJkmSOlUzXSfohpUwSZKkDlgJkyRJnZpxTJgkSZLGxUqYJEnqlGdHLiLJVkk2GVjfJMkd24slSZK0so3aHXkKMNjouiPwleWPI0mSpk3NpNVlUo3aCNuiqq6fXWluL1gJS7I6ydoka//9//73UjNKkqQVrKrdZVKN2gi7IclDZleS7AfctNDOVbWmqvarqv2eveMuS80oSZK04ow6MP+VwGeSXAEUsDPwzLZCSZKk6THJXYZtWrQSlmT/JHerqrOA+wKfAtYBJwGXjiGfJEnSijSsO/IDwC3N7UcCrwXeB/wSWNNiLkmSNCVmKq0uk2pYd+SqqvpFc/uZwJqqOhY4Nsk5rSaTJElawYY2wpJsWlXrgAOB1RvwWEmSpKGmdbLWYQ2pTwCnJbmG3tmQpwMkuRdwbcvZJEmSVqxFG2FV9dYkpwA7ASdX9Wfb2AQ4ou1wkiRp5ZvkubzaNLRLsarOnGfbD9qJI0mSNB0c1yVJkjo1yWcwtmnUGfMlSZK0jKyESZKkTk3r2ZFWwiRJkjpgJUySJHVqWs+OtBImSZLUASthkiSpU9N6dmTrjbDTr9ip7UOM7Dn7XNZ1hL6/P2/nriP0PfamrhP0PGGXq7qO0Pfql53RdYS+4679YNcR+n78wxO6jtD3/f3/susIfe9+8m+6jtB37qe36DpC3z8ccn3XEfpec+KOXUfou5H1XUfo+0jXAaaclTBJktQpz46UJEnS2FgJkyRJnZrWMWFWwiRJkjpgJUySJHVqSqcJsxEmSZK6ZXekJEmSxsZGmCRJ6lRVWl1GkeTgJBcluTjJUfPcnyT/3Nx/bpKHLPXrthEmSZKmWpJVwPuAJwL3B56V5P5zdnsisFezrAb+ZanHtREmSZI6NdPyMoKHARdX1SVVdQvwSeDQOfscCny8es4E7pRkSZcFshEmSZJWtCSrk6wdWFbP2WUXYPDahpc32zZ0nw3i2ZGSJKlTRbtnR1bVGmDNIrvMF2DuzBmj7LNBrIRJkqRpdzmw28D6rsAVG7HPBrERJkmSOjVT7S4jOAvYK8meSTYHDgOOn7PP8cCfNWdJPgK4tqquXMrXbXekJEmaalW1LsnLgS8Bq4CPVNUFSQ5v7j8aOBE4BLgYuBF44VKPayNMkiR1aqblMWGjqKoT6TW0BrcdPXC7gJct5zEXbYQlOYFFBp1V1ZOXM4wkSdK0GDYm7B+BdwCXAjcBH2yW64HzF3rQ4KmgX73xh8uVVZIkrUBFWl0m1aKVsKo6DSDJW6rqgIG7Tkjy9UUe1z8V9N92fu60XhxdkiRpQaOOCdsxyT2q6hKAJHsCO7YXS5IkTYsRZ7VfcUZthB0JnJrkkmZ9D3rXTZIkSdJGGKkRVlUnJdkLuG+z6ftVdXN7sSRJ0rSY5HFbbRqpEZZkM+ClwOy4sFOTfKCqbm0tmSRJ0go2anfkvwCbAe9v1p/XbHtJG6EkSdL0cEzY4vavqn0G1r+a5LttBJIkSZoGozbC1ie5Z1X9CCDJPYD17cWSJEnTwkrY4l4NfG3O2ZFLvmaSJEnStA7MX3TG/CT7J7lbVZ0C7AV8DrgOOBmwO1KSJGkjDbts0QeAW5rbDweOAo4BrqaZEV+SJGkpZtLuMqmGdUeuqqpfNLefCaypqmOBY5Oc02oySZKkFWxoIyzJplW1DjiQ354lf9TxZJIkSQuamdIxYcMaUp8ATktyDXATcDpAknsB17acTZIkacVatBFWVW9NcgqwE3ByVVVz1ybAEW2HkyRJK18N32VFGtqlWFVnzrPtB+3EkSRJmg65rbjVjvP2/OOJaeBectM2XUfoe+AOP+86Qt9W20/Gtdh/fPH2XUfoe8AzJueyqL+54LquI/RddfG2XUfou+9Z7+46Qt9n93591xH67jAzMT9yuW7VsBPwx2ffTSfnc7T5ppMz1/n9f/R/JmIw1ufu9uxW37hPu+rfJ+LrnGtyPiGSJElTxDMcJUlSp2YykYWq1lkJkyRJ6oCVMEmS1KnJGck4XlbCJEmSOmAlTJIkdWqm6wAdsRImSZLUASthkiSpUzPTeXKklTBJkqQuWAmTJEmdmmE6S2FWwiRJkjpgJUySJHVqWucJsxEmSZI65cB8SZIkjY2VMEmS1Ckna11EkkePsk2SJEmjGbU78j0jbpMkSdog1fIyqRbtjkzySOBRwI5J/mrgrm2BVYs8bjWwGuANd3kQT9/m7ssQVZIkaeUYNiZsc2DrZr9tBrZfBzx9oQdV1RpgDcB5e/7xJDdCJUlSx6b17MhFG2FVdRpwWpKPVdVPkmzT21zXjyeeJEnSyjTq2ZHbJDkb2B4gyTXA86vq/NaSSZKkqeDZkYtbA/xVVd29qu4OvKrZJkmSpI0waiVsq6r62uxKVZ2aZKuWMkmSpCkyrZWwURthlyR5PfCvzfpzgUvbiSRJkrTyjdod+SJgR+BzzbID8MK2QkmSpOlRaXeZVMPmCdsCOBy4F3Ae8KqqunUcwSRJklayYd2RxwC3AqcDTwTuB7yy5UySJGmKOCZsfvevqgcBJPkw8O32I0mSJK18wxph/a7HqlqXTHDHqiRJul2yEja/fZJc19wOsGWzHnoz52/bajpJkqQVathlixa8SLckSdJymNaLTI86RYUkSZKW0aiTtUqSJLViZkqHnNsIkyRJnXJgfkuOqa3bPsTI3vLWnbuO0Pfw103OVZ8Ov/aeXUcA4DkHXdl1hL7HfPKmriP0PXSLyXnfvvvJv+k6Qt9n93591xH6nn7uW7qO0PfhB7+h6wh9LzjhsK4j9O190Ju6jtB3ybWT87NuXdcBppyVMEmS1KlprYQ5MF+SJGkBSbZP8uUkP2z+v/M8++yW5GtJLkxyQZK/HOW5bYRJkqROVcvLEh0FnFJVewGnNOtzraN3fe37AY8AXpbk/sOe2EaYJEnSwg6ldy1tmv+fMneHqrqyqv6ruf1r4EJgl2FP7JgwSZLUqbanqEiyGlg9sGlNVa0Z8eF3raorodfYSvJ7Q461B/Bg4FvDnthGmCRJWtGaBteCja4kXwHuNs9dr9uQ4yTZGjgWeGVVXTdsfxthkiSpU12fHVlVj1/oviRXJ9mpqYLtBPxsgf02o9cA+7eq+twox3VMmCRJ0sKOB57f3H4+8IW5OyQJ8GHgwqp656hPbCNMkiR1asLPjnwbcFCSHwIHNesk2TnJic0+jwaeB/xhknOa5ZBhT2x3pCRJ0gKq6ufAgfNsvwI4pLn9DWCDTy+wESZJkjo1sxz1qtshuyMlSZI6YCVMkiR1quuzI7tiJUySJKkDVsIkSVKnpnNE2IiNsGYCsv8JHNBsOg04uqpubSuYJEnSSjZqJexfgM2A9zfrz2u2vaSNUJIkaXpM65iwURth+1fVPgPrX03y3YV2HrxQ5kHb78fe29xrCRElSZJWnlEH5q9Pcs/ZlST3ANYvtHNVramq/apqPxtgkiRpMTNpd5lUo1bCXg18Lckl9GaEvTvwwtZSSZKkqTGtk7WO1AirqlOS7AXch14j7PtVdXOrySRJklawUc+OXAX8EbBH85gDk7AhVwqXJEmaz3TWwUbvjjwB+A1wHtN7EoMkSdKyGbURtmtV7d1qEkmSNJWmtboz6tmR/5HkCa0mkSRJmiKjVsLOBI5LsglwK73B+VVV27aWTJIkTQXPjlzcO4BHAudV1XS+UpIkScto1EbYD4HzbYBJkqTlNq2Ni1EbYVcCpyb5D6A/P5hTVEiSJG2cURthlzbL5s0iSZK0LKb17MhRZ8x/M0CSrarqhnYjSZIkrXwjTVGR5JFJvgdc2Kzvk+T9rSaTJElTYYZqdZlUo84T9i56ly36OUBVfRc4oKVMkiRJK96oY8KoqsuSDG5av/xxJEnStJncWlW7Rm2EXZbkUUAl2Rx4BU3X5DB/esvNw3cak3f/7VVdR+j7ygMm5/yGW66/ousIAHz3S3fpOkLfRze7pesIfdf/JsN3GpNzP71F1xH67jBBP7Y//OA3dB2h78Vn/23XEfom6XU56W7bdx2hb5t9t+o6gibEqI2ww4F3A7sAlwMnAy9rK5QkSZoenh25iKq6BnhOy1kkSZKmxqKNsCTvYZGu2qp6xbInkiRJU6UmaHjBOA2rhK0duP1m4I0tZpEkSZoaizbCquqY2dtJXjm4LkmStBymdUzYqPOEwfSeQSpJkrTsRp4nTJIkqQ2TPKt9m4YNzP81t1XA7pjkutm7gKqqbdsMJ0mSVr7pbIINHxO2zbiCSJIkTRO7IyVJUqemtTtyQwbmS5IkaZlYCZMkSZ1yigpJkiSNjZUwSZLUqWm9bJGVMEmSpA6M1AhL8tQk2w2s3ynJU1pLJUmSpsZMy8ukGrUS9saqunZ2pap+xSIX806yOsnaJGs/f+OlS4woSZK08ow6Jmy+xtqCj62qNcAagG/t/LTp7OiVJEkjcUzY4tYmeWeSeya5R5J/Ar7TZjBJkqSVbNRG2BHALcCngE8DNwEvayuUJEmaHtM6Jmyk7siqugE4quUskiRJU2PUsyO/nOROA+t3TvKl1lJJkqSpMVPV6jKpRu2O3KE5IxKAqvol8HutJJIkSZoCozbCZpLsPruS5O4wpacySJKkZVUtL5Nq1CkqXgd8I8lpzfoBwOp2IkmSJK18ow7MPynJQ4BHNJuOrKpr2oslSZKmxcxE16vasyEX8D4AeAy9yt5mwHGtJJIkSZoCIzXCkrwfuBfwiWbTS5M8vqqcK0ySJC3JtM6YP2ol7LHAA6t653kmOQY4r7VUkiRpakzyhKptGvXsyIuA3QfWdwPOXf44kiRJ02HRSliSE+iNAdsO+H6SbzV3PQz4ZsvZJEnSFJjkgflJtqd32cY9gB8Dz2jmS51v31XAWuC/q+pJw557WHfkV5t9zgZuHT2yJEnSinAUcEpVvS3JUc363yyw718CFwLbjvLEw7ojdwGeCnwGeDPwR8DWwHlVddpiD5QkSRpFtfxviQ4FjmluHwM8Zb6dkuwK/A/gQ6M+8aKVsKr66+aJNwf2Ax4FvAj4YJJfVdX9hx3gK5ttOWqW1h155FZdR+h7yjsm53V5Mjt0HaFnM3jGvS/rOkXfsy66Q9cRALj3FpORA+AfDrm+6wh9x35hi64j9L3ghMO6jtD34Qe/oesIfS8++2+7jtD38Af9WdcR+q698sauI/T9qOsAY5JkNb89yfyaqloz4sPvWlVXAlTVlUkWumzju4D/BWwzaq5Rz47ckl5pbbtmuQLPjtQyswEmSdOp7bMjmwbXgo2uJF8B7jbPXa8b5fmTPAn4WVV9J8njRs01bGD+GuABwK+Bb9EbjP/OhQakSZIk3d5U1eMXui/J1Ul2aqpgOwE/m2e3RwNPTnIIsAWwbZL/XVXPXey4w8aE7Q7cAbgK+G/gcuBXQx4jSZI0sqpqdVmi44HnN7efD3xhnvyvqapdq2oP4DDgq8MaYDCkEVZVBwP7A//YbHoVcFaSk5O8efT8kiRJt0tvAw5K8kPgoGadJDsnOXEpTzx0TFgzS/75SX4FXNssT6I3V9gbl3JwSZKkSZ4nrKp+Dhw4z/YrgEPm2X4qcOoozz1sTNgr6J0R+Wh684T9J3AG8BEcmC9JkrTRhlXC9gA+Cxw5e3qmJEnScprWa0cOmyfsr8YVRJIkaZqMOk+YJElSK5ZhVvvbpWFTVEiSJKkFVsIkSVKnJvnsyDZZCZMkSeqAlTBJktSpZZjV/nbJSpgkSVIHrIRJkqROOU+YJElSB5yiYhFJnppku4H1OyV5SmupJEmSVrhRx4S9saqunV2pql+xyMW7k6xOsjbJ2rOuv3iJESVJ0ko2Q7W6TKpRG2Hz7bdgV2ZVramq/apqv/23vtfGJZMkSVrBRh0TtjbJO4H3AQUcAXyntVSSJGlqOEXF4o4AbgE+BXwauAl4WVuhJEmSVrqRKmFVdQNwVMtZJEnSFJrkcVttGvXsyC8nudPA+p2TfKm1VJIkSSvcqGPCdmjOiASgqn6Z5PfaiSRJkqaJ84QtbibJ7rMrSe4OU/qKSZIkLYNRK2GvA76R5LRm/QBgdTuRJEnSNJmZ0rMjRx2Yf1KShwCPaDYdWVXXtBdLkiRpZduQa0ceADyGXjfkZsBxrSSSJElTZTrrYKOfHfl+4HDgPOB84KVJ3tdmMEmSpJVs1ErYY4EHVjOlbZJj6DXIJEmSlsR5whZ3EbD7wPpuwLnLH0eSJGk6LFoJS3ICva7a7YALk3y7WX848M3240mSpJVuWithw7oj/3EsKSRJkqbMoo2wqjptvu1JVgGHtZJIkiRNlXKesN+VZFvgZcAuwPHAl5v1VwPnAP827AAve9QVSw65XF71rh27jtD3+dffr+sIfTd/+eyuIzTCZ8/YtesQABz/onVdR+i79Uc/6zpC32tOnJzP0Es2va7rCH17H/SmriP0nXS37buO0PfwB/1Z1xH6vnXex7uO0LfurC92HUETYlh35L8CvwTOAF5Cr/G1OXBoVZ3TbjRNm0lpgEmSxssxYfO7R1U9CCDJh4BrgN2r6tetJ5MkSVPBC3jP79bZG1W1HrjUBpgkSdLSDauE7ZNkduBFgC2b9QBVVdu2mk6SJK14DsyfR1WtGlcQSZKkabIhF/CWJEladtM6MH/UyxZJkiRpGVkJkyRJnZrWMWFWwiRJkjpgJUySJHXKMWGSJEkaGythkiSpU86YL0mSpLGxEiZJkjo149mRkiRJGhcrYZIkqVOOCZMkSdLYjNQIS/LoJF9O8oMklyS5NMkli+y/OsnaJGs/dvEVy5dWkiStODNVrS6TatTuyA8DRwLfAdYP27mq1gBrAH71rD+Y3K9ekiSpI6M2wq6tqv9oNYkkSZpK0zombNRG2NeSvB34HHDz7Maq+q9WUkmSJK1wozbCHt78v9/AtgL+cHnjSJKkaTPJ47baNGoj7MVV9VsD8ZPco4U8kiRJU2HUKSo+O8+2zyxnEEmSNJ2q5X+TatFKWJL7Ag8AtkvytIG7tgW2aDOYJEmaDnZHzu8+wJOAOwF/PLD918Cft5RJkiRpIiTZHvgUsAfwY+AZVfXLefa7E/Ah4IH0xs2/qKrOWOy5F22EVdUXgC8keeSwJ5IkSdoYk9xlCBwFnFJVb0tyVLP+N/Ps927gpKp6epLNgTsOe+Jh3ZHvodeaI8mz5t5fVa8YIbwkSdLt1aHA45rbxwCnMqcRlmRb4ADgBQBVdQtwy7AnHtYduXbg9puBN44QVpIkaWRVM60+f5LVwOqBTWuaq/uM4q5VdSVAVV2Z5Pfm2ecewP8FPppkH3pXGPrLqrphsSce1h15zMAX8MrBdUmSpNuDwcspzifJV4C7zXPX60Y8xKbAQ4AjqupbSd5Nr9vy9cMeNKqJ7rCVJEm3TzMdNzGq6vEL3Zfk6iQ7NVWwnYCfzbPb5cDlVfWtZv2z9Bphixp1njBJkqRpdDzw/Ob284EvzN2hqq4CLktyn2bTgcD3hj3xsIH5v+a2Ctgdk1w3e1fvmLXt8OySJEkLq8meJ+xtwKeTvBj4KfCnAEl2Bj5UVYc0+x0B/FtzZuQlwAuHPfGwMWHbLCW1JEnS7VlV/ZxeZWvu9iuAQwbWz+G3r7E91IaMCdso2WJV24cY2ad+fnbXEfreucfjuo7Qt2rb87uOAMAz/+hq3nTKXbqO0bN+fdcJ+jaZoM/QjUzO67L5ppOT5ZJrr+w6Qt82+27VdYS+a6+8sesIfevO+mLXEfo23f9JXUeYOF2PCeuKY8I0MSamASZJ0hi0XgmTJElazISPCWuNlTBJkqQOWAmTJEmdmrESJkmSpHGxEiZJkjpVnh0pSZKkcbESJkmSOuXZkZIkSRobK2GSJKlT0zpjvo0wSZLUKbsjJUmSNDZWwiRJUqecrFWSJEljYyVMkiR1yjFhkiRJGpuRGmFJ/jLJtun5cJL/SvKEtsNJkqSVb4ZqdZlUo1bCXlRV1wFPAHYEXgi8baGdk6xOsjbJ2o9d9N/LEFOSJGllGXVMWJr/DwE+WlXfTZKFdq6qNcAagGtf+PjJbYJKkqTOOSZscd9JcjK9RtiXkmwDzLQXS5IkaWUbtRL2YmBf4JKqujHJ9vS6JCVJkpbEecIW90jgoqr6VZLnAv8fcG17sSRJkla2URth/wLcmGQf4H8BPwE+3loqSZI0Narlf5Nq1EbYuuqNmjsUeHdVvRvYpr1YkiRJK9uoY8J+neQ1wHOBA5KsAjZrL5YkSZoWjglb3DOBm4EXV9VVwC7A21tLJUmStMKNVAlrGl7vHFj/KY4JkyRJy8B5whaR5BFJzkpyfZJbkqxP4tmRkiRJG2nUMWHvBQ4DPgPsB/wZsFdboSRJ0vSY5DMY2zRqI4yqujjJqqpaD3w0yTdbzCVJkrSijdoIuzHJ5sA5Sf4BuBLYqr1YkiRpWjgmbHHPA1YBLwduAHYD/qStUJIkaXpUVavLpBr17MifNDdvAt7cXhxJkqTpsGgjLMl5sPBouarae9kTSZKkqTK5tap2DauEPQ24K3DZnO13B65oJZEkSdI0GNKH+kVg73m27wec0HYf7pxjrh7n8cxy+80yKTnMYhazmGVasrhs3DJsYP4eVXXuPA23tcAeG9HmW4rVYz7eYswyv0nJMik5wCwLMcv8zDI/s8xvkrJoIwxrhG2xyH1bLmcQSZKkaTKsEXZWkj+fuzHJi4HvtBNJkiRp5Rs2MP+VwHFJnsNtja79gM2Bp7aYaz5rxny8xZhlfpOSZVJygFkWYpb5mWV+ZpnfJGXRRkgzuG/xnZI/AB7YrF5QVV9tNZUkSdIKN1IjTJIkSctr1MsWjU2S9UnOSfLdJP+V5FEd53ldkguSnNvkeniXeZpMT01SSe7brO+R5PwxZ+jsdRl4j5yf5IQkd2q2Py7JF8eVY5FcvneXcPw2vo9z3jOfSXLHIcdf8vcuyfVz1l+Q5L1Lfd6NzPJPSV45sP6lJB8aWH9Hkr8a5+dngj/HC37fkjwlyf1bPPbdknwyyY+SfC/JiUnuPe6f7xqfiWuEATdV1b5VtQ/wGuDvugqS5JHAk4CHVO/qAI/ndyeu7cKzgG8Ah3Vx8Al4XWbfIw8EfgG8bIzHXozv3Qk5/jwG3zO3AIcvsu/jgE4b0C34Js3XlGQTYAfgAQP3PwrYbMyZJvVzvJinAK00wpIEOA44taruWVX3B15Lb8J0rVCT2AgbtC3wS+j/dfT1JMc1fyEc3fwwadNOwDVVdTNAVV1TVVckOSTJ95N8I8k/j/mvx62BRwMvpqNGGAu/Lj9OskOTc78kp44hyxnALgPr2873HklycFOd+m6SU8aQa+57t/8eSfLeJC9o+fgLfY/2T/LN5nX4dpJtxnz8A5OcneS8JB9Jcgfof3++n+Qb9K7U0abTgXsl2T7J55tK3ZlJ9k6yB70G2pFNleb32wiQZMckxyY5q1ke3Wx/U5JjkpzcfJ6eluQfmtfrpCSbNfvN+zou4j+5rWH5AOB84NdJ7tw89n7A2WzA5yfJ1kk+2mQ4N8mfLOEl2ejP8TLnWFB61dEnA29v3hv3THJqkr9vPks/WOL75Q+AW6vq6NkNVXUOA3+8pNfrcXrzGvSr7Ul2an4/zlYWfz/JqiQfa9bPS3LkErKpLV3PFjt3AdYD5wDfB64FHtpsfxzwG+AewCrgy8DTW86ydZPlB8D7gcfSmzvtMmDPZp9PAF8c4+vzXODDze1vAg+hN3Hu+WPM8DuvS7P9x8AOze396P1F18bxr2/+XwV8Bjh4sfcIsOOc79n2Hbx3vziw33uBF3Tw3t0cuATYv9lnW2DTMR5/9rNz72afj9M7A3t2+15AgE8v92dq4D2zKfAF4H8C7wHe2Gz/Q+Cc5vabgL9exvfD7PJT4L3Nff8OPKa5vTtw4cCxv0GvKrUPcCPwxOa+4+hVYuZ9HUfI8+PmWC+l19B8C3AIvT/qvr6hnx/g74F3DTz/nTfye7Kkz/FSc2zg9+1jDPzeAU4F3tHcPgT4yhKO+wrgn+bZvgfNz3fgjsAWze29gLXN7VcBrxt4PbcBHgp8eeB57rScnymX5VkmsRI2W6K+L3Aw8PGmTAvw7aq6pKrW02v8PKbNIFV1Pb038mrg/wKfovfD65KqurTZ7RNtZpjHs4BPNrc/2ayP1XyvyxgqO4O2THIO8HNge3o/pGfN9x55BPD12e9ZVf2ipVyLvXfHaoH37kuBK6vqrGaf66pq3ZiPf2lV/aDZ7RjgAOC+zfYfVu+3xf9uIdLse2YtvV+qH6b33vjXJu9Xgbsk2W4Zjzn7fti3qvYF3jBw3+OB9zaZjqdX+ZmtSv5HVd0KnEfvF+pJzfbz6P1Cvg/zv47DzFbDHkWv8nTGwPo3m3025PPzeOB9s09eVb8cIcOg5focLzXHXIt93+bzueb/79D+lWQ2Az6Y5Dx6DdfZrtGzgBcmeRPwoKr6Nb0/uO6R5D1JDgauazmbNsKwecI6VVVnpNe9tePsprm7jCHDenp/7ZzavPGf3/YxF5LkLvT+Yn9gkqL3A7roVRrGaoHXZR23dXEvdrWFpbqpqvZtfmF+kd5Ykn+ejTY3Kr3qylhPA57z3h18XaDd12Yww9zv0csY4+uwgZ+dtnPd1PxC7VuggTyu12cT4JFVddPgxibSbBfuTJJbm4YpwAy9n9kb27CfHRf2IHrdkZfRq6BcB3yk2WdDPj9L/Vwt1+d47J/vOW5u/l/P0n6nXkCv4reYI4Gr6VVJN6FXMaSqvp7kAOB/AP+a5O1V9fEk+wB/RO+1fQbwoiXkUwsmsRLWl97Zf6vo/aUE8LAkezbjA55Jr2zf5vHvk2SvgU37Aj+j99fFHs22Z7aZYY6nAx+vqrtX1R5VtRtwKbDrGDMs9Lr8hF53x0Obba2MyxhUVdfSK+H/9exYGeZ/j5wBPDbJnk3+7dvONue9+xPg/knu0PzCOXAMx5/ve3QhsHOS/Zt9tknSyh9iCxz/amCPJPdqtj0POI1e9+2eSe7ZbB9XdffrwHOgN26P3hi264Bf0+vOadPJwMtnV5LsuwGP/T7zv47D/Ce9kyV+UVXrm0rSnYBH0vuMwIZ9fuZ+DXfegK+hbxk+x8uSY0Rtvje+CtwhA1epaT6rdx/YZzt61ewZet/3Vc1+dwd+VlUfpFflfUjzR+AmVXUs8Hp6Q1c0YSaxEjZboobeXzjPr6r1zV+IZwBvo/eX3NfpjZFo09bAe9I7dXodcDG97pXPAycluQb4dssZBj2L3tc/6Fh6Z9CM00Kvy/2ADyd5LfCtcQSpqrOTfJfeSQqXMc97pKkorAY+1/xQ/xlwUAtx5n3vApcl+TRwLvBDegOg27bQ9+ijzfYtgZvodeVcv9CTtHD8TwCfaRp/ZwFHV9XNzffn/zSfqW9w2+TQbXoT8NEk59IbezVbqTsB+GySQ4Ejqur0Fo79CuB9zbE3pfdeXeyMzb6q+k2SFzLndRzhoefROyvy3+ds27qqrlnoZ+win5//v/kazqdXBXozt3XNbZAlfo6XLccIPkmvO/AVDK9abZCqqiRPBd6V5Ch6Va4f0xs3Oev9wLFJ/hT4GnBDs/1xwKuT3Erv8/xn9E50+GhuO4HtNcuZV8vjdjNZa/OX6l9X1ZM6jkKSravq+qY7433AD6vqn7rOJUmSbj8mujtygv15U/G4gF55+APdxpEkSbc3t5tKmCRJ0kpiJUySJKkDNsIkSZI6YCNMkiSpAzbCJEmSOmAjTJIkqQM2wiRJkjrw/wCgI4L+muqB0gAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 864x648 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Correlation matrix\n",
"corrmat = data.corr()\n",
"fig = plt.figure(figsize = (12, 9))\n",
"\n",
"sns.heatmap(corrmat, vmax = .8, square = True)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "38ffa726",
"metadata": {},
"source": [
"### Splitting the features and target"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ad95615d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(400, 11)\n",
"(400,)\n"
]
}
],
"source": [
"#seperating the X and the Y from the dataset\n",
"X=data.drop(['Class','Al','Su'], axis=1)\n",
"Y=data[\"Class\"]\n",
"print(X.shape)\n",
"print(Y.shape)\n",
"#getting just the values for the sake of processing (its a numpy array with no columns)\n",
"X_data=X.values\n",
"Y_data=Y.values"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "987d85cc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[8.000e+01, 1.020e+00, 1.000e+00, ..., 7.800e+03, 5.200e+00,\n",
" 1.000e+00],\n",
" [5.000e+01, 1.020e+00, 1.000e+00, ..., 6.000e+03, 4.710e+00,\n",
" 0.000e+00],\n",
" [8.000e+01, 1.010e+00, 1.000e+00, ..., 7.500e+03, 4.710e+00,\n",
" 0.000e+00],\n",
" ...,\n",
" [8.000e+01, 1.020e+00, 1.000e+00, ..., 6.600e+03, 5.400e+00,\n",
" 0.000e+00],\n",
" [6.000e+01, 1.025e+00, 1.000e+00, ..., 7.200e+03, 5.900e+00,\n",
" 0.000e+00],\n",
" [8.000e+01, 1.025e+00, 1.000e+00, ..., 6.800e+03, 6.100e+00,\n",
" 0.000e+00]])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_data"
]
},
{
"cell_type": "markdown",
"id": "ef0afcab",
"metadata": {},
"source": [
"### Splittng data into train and test"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "5c0ce1f4",
"metadata": {},
"outputs": [],
"source": [
"# Using Skicit-learn to split data into training and testing sets\n",
"from sklearn.model_selection import train_test_split\n",
"# Split the data into training and testing sets\n",
"X_train, X_test, Y_train, Y_test = train_test_split(X_data, Y_data, test_size = 0.2, random_state = 42)"
]
},
{
"cell_type": "markdown",
"id": "26033386",
"metadata": {},
"source": [
"### Model training - Random Forest"
]
},
{
"cell_type": "markdown",
"id": "d98c855a",
"metadata": {},
"source": [
"#### ISOLATION FOREST"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "b41d16ee",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import classification_report, accuracy_score,precision_score,recall_score,f1_score,matthews_corrcoef\n",
"from sklearn.metrics import confusion_matrix"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "53a3cd66",
"metadata": {},
"outputs": [],
"source": [
"#Building another model/classifier ISOLATION FOREST\n",
"from sklearn.ensemble import IsolationForest\n",
"ifc=IsolationForest(max_samples=len(X_train),\n",
" contamination=outlier_fraction/100,random_state=1)\n",
"ifc.fit(X_train)\n",
"scores_pred = ifc.decision_function(X_train)\n",
"y_pred = ifc.predict(X_test)\n",
"\n",
"\n",
"# Reshape the prediction values to 0 for valid, 1 for fraud. \n",
"y_pred[y_pred == 1] = 0\n",
"y_pred[y_pred == -1] = 1\n",
"\n",
"n_errors = (y_pred != Y_test).sum()"
]
},
{
"cell_type": "markdown",
"id": "e8dd7a8f",
"metadata": {},
"source": [
"### Model eveuation"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "60c5a8a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"the Model used is Isolation Forest\n",
"The accuracy is 0.65\n",
"The precision is 0.65\n",
"The recall is 1.0\n",
"The F1-Score is 0.787878787878788\n",
"The Matthews correlation coefficient is0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:873: RuntimeWarning: invalid value encountered in scalar divide\n",
" mcc = cov_ytyp / np.sqrt(cov_ytyt * cov_ypyp)\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAApoAAALJCAYAAAAUFoOmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAsmUlEQVR4nO3de5yndVk//te1C8hBNFDAFQ9oUmaeA/KQipGKlmL2UzM1Mor8liaeTU08pF/LIg+YuR7RPIAP5YuIJUYSapaAoiKYhBgiKyBaIiLCzvX7Yz6rw7o7O8tn73tmdp5PHp/HfO7D576vGZbh2uu63+93dXcAAGBbW7XYAQAAsH2SaAIAMAiJJgAAg5BoAgAwCIkmAACDkGgCADAIiSawzVXVLlV1clX9b1V9YIrrPLGqTt2WsS2WqnpAVf3nYscBMKYyjyasXFX1O0meleTOSa5Kck6SV3b3p6a87pOTPD3J/br7+mnjXOqqqpPs393/tdixACwlKpqwQlXVs5K8NsmrkuyT5HZJ/i7JYdvg8rdP8tWVkGQuRFXtsNgxACwGiSasQFV18yQvT/In3f2h7r66u6/r7pO7+7mTc25SVa+tqksnr9dW1U0mxw6uqkuq6tlVdXlVrauqp0yOvSzJS5I8vqq+X1VHVNVLq+of5tx/v6rqDQlYVf1eVX2tqq6qqouq6olz9n9qzufuV1VnTlryZ1bV/eYcO72qXlFVn55c59SquuVmvv8N8T9vTvyPrqpHVNVXq+o7VfXCOecfVFWfqar/mZx7bFXtNDl2xuS0L0y+38fPuf7zq+pbSd6xYd/kMz87uce9J9u3rqpvV9XB0/x7BVhqJJqwMt03yc5JTpznnBcluU+Seya5R5KDkrx4zvFbJbl5kn2THJHkjVW1R3cfndkq6fHdfdPuftt8gVTVbklen+Th3b17kvtltoW/8Xl7Jjllcu4tkhyT5JSqusWc034nyVOS7J1kpyTPmefWt8rsz2DfzCbGb0nypCS/lOQBSV5SVXecnLs+yTOT3DKzP7tDkvxxknT3Ayfn3GPy/R4/5/p7Zra6e+TcG3f3hUmen+Q9VbVrknckeWd3nz5PvADLjkQTVqZbJPn2FlrbT0zy8u6+vLuvSPKyJE+ec/y6yfHruvujSb6f5OdvZDwzSe5aVbt097ru/vImzvn1JBd097u7+/rufl+SryR55Jxz3tHdX+3ua5KckNkkeXOuy+zzqNcleX9mk8jXdfdVk/t/Ocndk6S7z+7uf5/c9+tJ3pzkQQv4no7u7msn8dxAd78lyQVJ/iPJmswm9gDbFYkmrExXJrnlFp4dvHWS/56z/d+TfT++xkaJ6g+S3HRrA+nuq5M8PslTk6yrqlOq6s4LiGdDTPvO2f7WVsRzZXevn7zfkAheNuf4NRs+X1U/V1UfqapvVdX3Mlux3WRbfo4ruvuHWzjnLUnumuQN3X3tFs4FWHYkmrAyfSbJD5M8ep5zLs1s23eD20323RhXJ9l1zvat5h7s7o9190MyW9n7SmYTsC3FsyGmb97ImLbGmzIb1/7dfbMkL0xSW/jMvFN6VNVNMzsY621JXjp5NABguyLRhBWou/83s88lvnEyCGbXqtqxqh5eVX81Oe19SV5cVXtNBtW8JMk/bO6aW3BOkgdW1e0mA5H+bMOBqtqnqh41eVbz2sy24Ndv4hofTfJzVfU7VbVDVT0+yV2SfORGxrQ1dk/yvSTfn1Rb/89Gxy9Lcsef+tT8Xpfk7O7+g8w+e/r3U0cJsMRINGGF6u5jMjuH5ouTXJHkG0meluT/TU75iyRnJfliki8l+dxk342518eTHD+51tm5YXK4KsmzM1ux/E5mn338401c48okvzE598okz0vyG9397RsT01Z6TmYHGl2V2Wrr8Rsdf2mS4yaj0h+3pYtV1WFJDs3s4wLJ7L+He28YbQ+wvTBhOwAAg1DRBABgEBJNAAAGIdEEAGAQEk0AAAYx32TNi2qHnfY1SglYkHP3u8dihwAsE3f+6ke3NAfu4K779tcWPcfZ8ZZ3HOXnoKIJAMAgJJoAAAxCogkAwCCW7DOaAADbpZlNrbK7fVLRBABgECqaAABj6pnFjmA0KpoAAAxCogkAwCC0zgEAxjSjdQ4AAFNR0QQAGFEbDAQAANORaAIAMAitcwCAMRkMBAAA01HRBAAYk8FAAAAwHYkmAACD0DoHABjTzPrFjmA0KpoAAAxCRRMAYEwraDCQRBMAgJ9SVV9PclWS9Umu7+4DqmrPJMcn2S/J15M8rru/u7lraJ0DALA5D+7ue3b3AZPtFyQ5rbv3T3LaZHuzVDQBAMa0vFcGOizJwZP3xyU5PcnzN3eyiiYAAJvSSU6tqrOr6sjJvn26e12STL7uPd8FVDQBAEbUS2Aw0CRxPHLOrrXdvXaj0+7f3ZdW1d5JPl5VX9na+0g0AQBWmElSuXFiufE5l06+Xl5VJyY5KMllVbWmu9dV1Zokl893Da1zAABuoKp2q6rdN7xP8tAk5yb5cJLDJ6cdnuSk+a6jogkAMKblMRhonyQnVlUymy++t7v/qarOTHJCVR2R5OIkj53vIhJNAABuoLu/luQem9h/ZZJDFnodrXMAAAahogkAMKYlMOp8LCqaAAAMQkUTAGBMM+sXO4LRqGgCADAIiSYAAIPQOgcAGJPBQAAAMB0VTQCAMS2PlYG2CRVNAAAGIdEEAGAQWucAAGMyGAgAAKajogkAMCaDgQAAYDoSTQAABqF1DgAwou71ix3CaFQ0AQAYhIomAMCYTG8EAADTkWgCADAIrXMAgDGZRxMAAKajogkAMCaDgQAAYDoSTQAABqF1DgAwphkrAwEAwFQkmgAADELrHABgTEadAwDAdFQ0AQDGZGUgAACYjkQTAIBBaJ0DAIzJYCAAAJiOiiYAwJgMBgIAgOlINAEAGITWOQDAmLTOAQBgOiqaAAAj6l6/2CGMRkUTAIBBSDQBABiE1jkAwJgMBgIAgOmoaAIAjMla5wAAMB2JJgAAg9A6BwAYk8FAAAAwHYkmAACD0DoHABiTUecAADAdFU0AgDEZDAQAANORaAIAMAitcwCAMRkMBAAA01HRBAAYk8FAAAAwHYkmAACD0DoHABiT1jkAAExHRRMAYEymNwIAgOlINAEAGITWOQDAmAwGAgCA6ahoAgCMyWAgAACYjkQTAIBBaJ0DAIzJYCAAAJiOiiYAwJgMBgIAgOlINAEAGITWOQDAmAwGAgCA6Ug0AQAYhNY5AMCYtM4BAGA6KpoAAGPqXuwIRqOiCQDAICSaAAAMQuscAGBMBgMBAMB0VDQBAMakogkAANORaAIAMAitcwCAMbXWOQAATEVFEwBgTAYDAQDAdCSaAAAMQuscAGBM3YsdwWhUNAEAGISKJgDAmAwGAgCA6Ug0AQAYhNY5AMCYtM4BAGA6KpoAAGOy1jkAAExHogkAwCC0zgEARtQzVgYCAICpSDQBABiE1jkAwJjMowkAANNR0QQAGJN5NAEAYDoSTQAABqF1DgAwJvNoAgDAdFQ0AQDGZHojAACYjkQTAICfUlWrq+rzVfWRyfaeVfXxqrpg8nWPLV1DogkAMKaZmcV/Lcwzkpw/Z/sFSU7r7v2TnDbZnpdEEwCAG6iq2yT59SRvnbP7sCTHTd4fl+TRW7qOwUAAAGPqxZ/eqKqOTHLknF1ru3vtnO3XJnlekt3n7Nunu9clSXevq6q9t3QfiSYAwAozSSrXbupYVf1Gksu7++yqOnia+0g0AQCY6/5JHlVVj0iyc5KbVdU/JLmsqtZMqplrkly+pQt5RhMAYEyLPRBoC4OBuvvPuvs23b1fkt9O8i/d/aQkH05y+OS0w5OctKVvVaIJAMBCvDrJQ6rqgiQPmWzPS+scAGBMy2it8+4+Pcnpk/dXJjlkaz6vogkAwCAkmgAADELrnGXjYQ89OMcc8/KsXrUqb3/H+/JXr3njYocELAE73OqWWfNXz84Oe+2RzHT+5/h/ynffdVJu8gt3zK1e9rTUTXZMXz+Ty172xvzwi19d7HAh6QWvzLPsSTRZFlatWpXXv+6VOfQRT8gll6zLv3/mozn5I6fm/PMvWOzQgEXW69fn8le/Ndeed2FW7bZL9vvQ63P1pz+XvZ/7+/n2se/N1Wecld0edED2fu7v5+Inb3HFPGAbGrR1XlV7VdVeQ96DleGgA++VCy/8ei666OJcd911OeGEk/KoRz5sscMCloD1V3w31553YZJk5uprcu2FF2eHfW6Z7s6qm+6aJFl1091y3eXfWcwwYUXa5hXNqqokRyd5WpJKsqqqrk/yhu5++ba+HyvDrfe9Vb5xyaU/3r7km+ty0IH3WsSIgKVox333zs53+dn88AtfyeWvWpvbvu0V2fv5RySrKv/9+OcsdngwaxmNOp/WEBXNozI7o/yB3X2L7t4jyS8nuX9VPXOA+7ECzP795YZ6CawVCywdtevO2fcNL8plr1qbmauvyc884RG5/FVvyYUPOjyXv+otWfOqZyx2iLDiDJFo/m6SJ3T3RRt2dPfXkjxpcmyzqurIqjqrqs6ambl6gNBYrr55ybrc9ja3/vH2bfZdk3XrLlvEiIAlZYfV2fcNL8r/nnx6vn/qvyVJbv6bv5arTv10kuSqf/xkdr77zy9igPATPTOz6K+xDJFo7tjd3954Z3dfkWTH+T7Y3Wu7+4DuPmDVqt0GCI3l6syzzsmd7nSH7LffbbPjjjvmcY87LCd/5NTFDgtYIta86qj86MJv5LvvOPHH+66//MrsetDdkiS73vceue7r31ys8GDFGmLU+Y9u5DHYrPXr1+cZR704Hz3lvVm9alXeedzxOe8805QAyS6/dJfc/NGH5IdfuSj7nfSGJMkVxxyXb7349dnnRX+U7LA6fe11Wffnb1jkSGHlqW39nFtVrU+yqb53Jdm5u+etam6ww077egAPWJBz97vHYocALBN3/upHf/qh/5Fd/crfXfQcZ7cXvWuUn8M2r2h29+rNHauqm2zr+wEAsDRt82c0q+rPN7P/Zkk+tq3vBwCwrPTM4r9GMsRgoAdU1Svn7qiqWyX5ZJJPDHA/AACWoCESzUcluUdVHZMkVbV/kk8l+bvuftkA9wMAYAka4hnNH1bVbyZ5f1W9P8l9kxzV3Sdu4aMAANu/FbQy0BBLUD5r8vazSZ6X2Zb5HTbs7+5jtvU9AQBYeoaYR3P3Oe9fv4l9AAAr14gr8yy2IVrnnsMEAGCQ6Y3+qqqeuon9z6yqv9zW9wMAYGkaonX+G0nuuon9r0vyxSTPH+CeAADLwwoaDDTE9Ebd/dMzgU72LfqyTwAAjGOIiuYPqmr/7r5g7s7JfJrXDHA/AIDlY8SVeRbbEInmS5L8Y1X9RZKzJ/sOSPJnSY4a4H4AACxBQ4w6/8eqenSS5yZ5+mT3uUl+q7u/tK3vBwDA0jRERTPdfW6Sw4e4NgDAsmYwEAAATGeQiiYAAJvWK2hlIBVNAAAGMViiWVW3qaoTq+qKqrqsqj5YVbcZ6n4AACwtQ1Y035Hkw0nWJNk3ycmTfQAAK9dML/5rJEMmmnt19zu6+/rJ651J9hrwfgAALCFDJprfrqonVdXqyetJSa4c8H4AACwhQ446//0kxyb52ySd5N8m+wAAVq4VNI/mYIlmd1+c5FFDXR8AgKVtmyeaVfWSeQ53d79iW98TAGDZ6JUzj+YQFc2rN7FvtyRHJLlFEokmAMAKsM0Tze7+mw3vq2r3JM9I8pQk70/yN5v7HAAA25dBntGsqj2TPCvJE5Mcl+Te3f3dIe4FALCsGAx041XVa5I8JsnaJHfr7u9v63sAALD0DVHRfHaSa5O8OMmLqmrD/srsYKCbDXBPAIBloVU0b7zuHnISeAAAlglJIQAAgxhyZSAAADa2glrnKpoAAAxCRRMAYEwzK2dlIBVNAAAGIdEEAGAQWucAAGMyGAgAAKajogkAMCYVTQAAmI5EEwCAQWidAwCMqFvrHAAApqKiCQAwJoOBAABgOhJNAAAGoXUOADAmrXMAAJiORBMAgEFonQMAjKi1zgEAYDoqmgAAY1LRBACA6Ug0AQAYhNY5AMCYZhY7gPGoaAIAMAgVTQCAEZneCAAApiTRBABgEFrnAABj0joHAIDpqGgCAIzJ9EYAADAdiSYAAIPQOgcAGJF5NAEAYEoqmgAAYzIYCAAApiPRBABgEFrnAAAjMhgIAACmJNEEAGAQWucAAGMy6hwAAKajogkAMKJW0QQAgOlINAEAGITWOQDAmLTOAQBgOiqaAAAjMhgIAACmJNEEAGAQWucAAGPSOgcAgOmoaAIAjMhgIAAAmJJEEwCAQWidAwCMSOscAACmpKIJADAiFU0AAJiSRBMAgEFonQMAjKlrsSMYjYomAACDUNEEABiRwUAAADAliSYAAIPQOgcAGFHPGAwEAABTkWgCADAIrXMAgBEZdQ4AAFNS0QQAGFFbGQgAAKYj0QQA4Aaqaueq+mxVfaGqvlxVL5vs37OqPl5VF0y+7jHfdSSaAAAj6pnFfy3AtUl+tbvvkeSeSQ6tqvskeUGS07p7/ySnTbY3S6IJAMAN9KzvTzZ3nLw6yWFJjpvsPy7Jo+e7jsFAAAAjWgorA1XVkUmOnLNrbXev3eic1UnOTnKnJG/s7v+oqn26e12SdPe6qtp7vvtINAEAVphJUrl2C+esT3LPqvqZJCdW1V239j5a5wAAbFZ3/0+S05McmuSyqlqTJJOvl8/3WYkmAMCIuhf/tSVVtdekkpmq2iXJryX5SpIPJzl8ctrhSU6a7zpa5wAAbGxNkuMmz2muSnJCd3+kqj6T5ISqOiLJxUkeO99FJJoAACNaCoOBtqS7v5jkXpvYf2WSQxZ6Ha1zAAAGIdEEAGAQWucAACNaDq3zbUVFEwCAQahoAgCMaCHTC20vVDQBABiERBMAgEFonQMAjMhgIAAAmJKKJgDAiLpVNAEAYCoSTQAABqF1DgAwop5Z7AjGo6IJAMAgJJoAAAxC6xwAYEQzRp0DAMB0VDQBAEZkHk0AAJiSRBMAgEFonQMAjKhntM4BAGAqW0w0q+qxVbX75P2Lq+pDVXXv4UMDANj+dC/+aywLqWj+eXdfVVW/kuRhSY5L8qZhwwIAYLlbSKK5fvL115O8qbtPSrLTcCEBALA9WMhgoG9W1ZuT/FqSv6yqm8SznQAAN4rBQDf0uCQfS3Jod/9Pkj2TPHfIoAAAWP4WUtFck+SU7r62qg5Ocvck7xoyKACA7ZW1zm/og0nWV9WdkrwtyR2SvHfQqAAAWPYWkmjOdPf1SR6T5LXd/czMVjkBAGCzFtI6v66qnpDkd5M8crJvx+FCAgDYfrXW+Q08Jcl9k7yyuy+qqjsk+YdhwwIAYLnbYkWzu89L8qdzti9K8uohgwIA2F6NuTLPYttiollV+yf5v0nukmTnDfu7+44DxgUAwDK3kNb5OzK75OT1SR6c2amN3j1kUAAALH8LGQy0S3efVlXV3f+d5KVV9ckkRw8cGwDAdmclzaO5kETzh1W1KskFVfW0JN9MsvewYQEAsNwtJNE8KsmumR0Q9Iokv5rk8AFjAgDYbq2k6Y0WMur8zMnb72d2qiMAANiizSaaVXVyks0OwO/uRw0SEQAA24X5Kpp/PVoUAAArhHk0k3T3vyZJVe2W5Jrunplsr05yk3HCAwBguVrIPJqnZXYw0Aa7JPnnYcIBAGB7sZBR5zt39/c3bHT396tq1/k+AADApplH84aurqp7d/fnkqSqfinJNcOGBbBwP/tvxy52CABswkLn0fxAVV062V6T5PGDRQQAsB0zj+Yc3X1mVd05yc8nqSRf6e7rBo8MAIBlbSEVzUwSy3MHjgUAgO3IghJNAAC2jZU0GGgh0xsBAMBW22KiWbOeVFUvmWzfrqoOGj40AIDtTy+B11gWUtH8uyT3TfKEyfZVSd44WEQAAGwXFvKM5i93972r6vNJ0t3fraqdBo4LAIBlbiGJ5nWT9c07SapqryQzg0YFALCdMhjohl6f5MQke1fVK5N8KsmrBo0KAIBlbyETtr+nqs5OckhmJ2x/dHefP3hkAADbISsDzVFVt0vygyQnz93X3RcPGRgAAMvbQp7RPCWzz2dWkp2T3CHJfyb5xQHjAgBgmVtI6/xuc7er6t5J/miwiAAAtmMraUT1Vq8M1N2fS3LgALEAALAdWcgzms+as7kqyb2TXDFYRAAA27GOwUBz7T7n/fWZfWbzg8OEAwDA9mLeRHMyUftNu/u5I8UDAMB2YrOJZlXt0N3XTwb/AACwDcz0Ykcwnvkqmp/N7POY51TVh5N8IMnVGw5294cGjg0AgGVsIc9o7pnkyiS/mp/Mp9lJJJoAAGzWfInm3pMR5+fmJwnmBiuo6AsAsO3MGHWeJFmd5KbJJn8aEk0AAOY1X6K5rrtfPlokAAArwEqaR3O+lYFWzk8BAIBtbr5E85DRogAAYLuz2dZ5d39nzEAAAFaCmcUOYETzVTQBAOBGW8g8mgAAbCMGAwEAwJQkmgAADELrHABgRAYDAQDAlFQ0AQBGpKIJAABTkmgCADAIrXMAgBGZRxMAAKakogkAMKKZlVPQVNEEAGAYEk0AAAahdQ4AMKIZg4EAAGA6KpoAACPqxQ5gRCqaAAAMQqIJAMAgtM4BAEY0s9gBjEhFEwCAQUg0AQAYhNY5AMCIZso8mgAAMBUVTQCAEZlHEwAApiTRBABgEFrnAAAjMo8mAABMSUUTAGBEMytndiMVTQAAhiHRBABgEFrnAAAjmsnK6Z2raAIAMAgVTQCAEVkZCAAApiTRBABgEFrnAAAjMo8mAABMSUUTAGBE1joHAIApSTQBABiE1jkAwIjMowkAAFNS0QQAGJHpjQAAWLGq6rZV9YmqOr+qvlxVz5js37OqPl5VF0y+7jHfdSSaAABs7Pokz+7uX0hynyR/UlV3SfKCJKd19/5JTptsb5bWOQDAiJbDPJrdvS7Jusn7q6rq/CT7JjksycGT045LcnqS52/uOiqaAAArTFUdWVVnzXkdOc+5+yW5V5L/SLLPJAndkIzuPd99VDQBAFaY7l6bZO2Wzquqmyb5YJKjuvt7VVs3kkmiCQAwouXQOk+Sqtoxs0nme7r7Q5Pdl1XVmu5eV1Vrklw+3zW0zgEAuIGaLV2+Lcn53X3MnEMfTnL45P3hSU6a7zoqmgAAI+rlMY/m/ZM8OcmXquqcyb4XJnl1khOq6ogkFyd57HwXkWgCAHAD3f2pJJtLiQ9Z6HW0zgEAGISKJgDAiJbLYKBtQUUTAIBBqGgCAIxIRRMAAKYk0QQAYBBa5wAAI+rFDmBEKpoAAAxCRRMAYEQzy2NloG1CRRMAgEFINAEAGITWOQDAiMyjCQAAU1LRBAAYkYomAABMSaIJAMAgtM4BAEZkZSAAAJiSRBMAgEFonQMAjMgSlAAAMCUVTQCAEZlHEwAApiTRBABgEFrnAAAjMo8mAABMSUUTAGBEMyuopqmiCQDAICSaAAAMQuscAGBE5tEEAIApqWgCAIxo5QwFUtEEAGAgEk0AAAahdQ4AMCKDgQAAYEoqmgAAI5qpxY5gPCqaAAAMQqIJAMAgtM4BAEY0s4Jm0lTRBABgECqaAAAjWjn1TBVNAAAGItEEAGAQWucAACOyMhAAAExJogkAwCC0zgEARmQeTQAAmJKKJgDAiFZOPVNFEwCAgUg0AQAYhNY5AMCIzKMJAABTUtEEABiR6Y0AAGBKEk0AAAahdQ4AMKKV0zhX0QQAYCAqmgAAIzK9EQAATEmiCQDAILTOAQBG1CtoOJCKJgAAg1DRBAAYkcFAAAAwJYkmAACD0DoHABjRjMFAAAAwHRVNAIARrZx6poomAAADkWgCADAIrXMAgBEZDAQAAFOSaAIAMAitcwCAEVmCEgAApqSiybLxsIcenGOOeXlWr1qVt7/jffmr17xxsUMCloiH/tbh2W3XXbNq1aqsXr06J7z99fnrY9+af/30f2SHHXfIbfddk7944bNys91vutihQnoFDQaSaLIsrFq1Kq9/3Stz6COekEsuWZd//8xHc/JHTs3551+w2KEBS8Tb3/Dq7PEzN//x9n0PvFeOeupTssMOq3PM370tb3338XnWHx+xiBHCyqN1zrJw0IH3yoUXfj0XXXRxrrvuupxwwkl51CMftthhAUvY/X/5l7LDDquTJHf/xTvnssu/vcgRwcqjosmycOt9b5VvXHLpj7cv+ea6HHTgvRYxImApqaoc+cwXpary2MMensce9ogbHD/xlFNz6CEPWqTo4IZW0mCgwRLNqtohycOT3Hmy6/wk/9Td1w91T7ZfVfVT+7pXzjMuwPze/aa/yd573SJXfvd/8odHvTB3uP1tc8A975YkefNx78vq1avzGw998CJHCSvPIK3zqrp1ki8neXaSWyfZN8lzk3x5cmxznzuyqs6qqrNmZq4eIjSWqW9esi63vc1P/ujcZt81WbfuskWMCFhK9t7rFkmSW+zxMznkgffLl877zyTJSR/9eM749Gfzl0c/b5N/YYXF0Evgn7EM9Yzmq5K8qbsP7u5ndvdR3f2gJG9M8n8396HuXtvdB3T3AatW7TZQaCxHZ551Tu50pztkv/1umx133DGPe9xhOfkjpy52WMAS8INrfpirr/7Bj9//22c/l/3vuF8+9e9n5W3v+UDe8JdHZ5edd17kKGFlGqp1fp/u/r2Nd3b366vqPwe6J9ux9evX5xlHvTgfPeW9Wb1qVd553PE577yvLnZYwBJw5Xe+m2e88BVJkvXXr88jHnpwfuU+B+Thj/v9/Oi66/KHR70oyeyAoKOf9/TFDBVWnBriObeq+nx3b3KkxnzH5tphp309gAcsyDWXfnKxQwCWiR1vecdFf4bi8P1+a9FznOO+/sFRfg5DVTRvXlWP2cT+SnKzge4JAMASMlSi+a9JHrmZY2cMdE8AgCVvZgXNmjJUonlUd//vpg5U1YED3RMAgCVkqFHnp1XVHhvvrKqHJPnQQPcEAGAJGSrRfHOST1TVXht2VNXvJFmb5NcHuicAwJLXS+A1lkFa5939lqr6YZJ/qaqHJnl8kqcmeXB3f32IewIAsLQMtgRld797kmx+PsnFSe7f3VcOdT8AgOVgZtSa4uIaJNGsqi9ltjJbSXZNcovMttKTJN199yHuCwDA0jFURfMxSfZJ8o2N9t8+yaUD3RMAgCVkqMFAf5vke93933NfSX4wOQYAsCL1EvhnLEMlmvt19xc33tndZyXZb6B7AgCwhAyVaO48z7FdBronAABLyFCJ5plV9Ycb76yqI5KcPdA9AQCWvJkl8BrLYEtQJjmxqp6YnySWByTZKclvDnRPAACWkKEmbL8syf2q6sFJ7jrZfUp3/8sQ9wMAWC7Mo7mNdPcnknxiyHsAALA0DfWMJgAAK9ygFU0AAG5ozHksF5uKJgAAg1DRBAAY0ZjTCy02FU0AAAYh0QQAYBBa5wAAI+o2GAgAAKaiogkAMKKVtDKQiiYAAIOQaAIAMAitcwCAEZlHEwAApqSiCQAwImudAwCwYlXV26vq8qo6d86+Pavq41V1weTrHlu6jkQTAICNvTPJoRvte0GS07p7/ySnTbbnpXUOADCi5TCPZnefUVX7bbT7sCQHT94fl+T0JM+f7zoqmgAAK0xVHVlVZ815HbmAj+3T3euSZPJ17y19QEUTAGBES2Gt8+5em2Tt0PdR0QQAYCEuq6o1STL5evmWPiDRBABgIT6c5PDJ+8OTnLSlD2idAwCMaDmsDFRV78vswJ9bVtUlSY5O8uokJ1TVEUkuTvLYLV1HogkAwA109xM2c+iQrbmO1jkAAINQ0QQAGJElKAEAYEoqmgAAI1oOKwNtKyqaAAAMQqIJAMAgtM4BAEa0FJagHIuKJgAAg1DRBAAYkcFAAAAwJYkmAACD0DoHABiRlYEAAGBKKpoAACOaMb0RAABMR6IJAMAgtM4BAEa0chrnKpoAAAxERRMAYERWBgIAgClJNAEAGITWOQDAiLTOAQBgSiqaAAAjaisDAQDAdCSaAAAMQuscAGBEBgMBAMCUJJoAAAxC6xwAYEStdQ4AANNR0QQAGJF5NAEAYEoSTQAABqF1DgAwIvNoAgDAlFQ0AQBGZDAQAABMSaIJAMAgtM4BAEZkMBAAAExJRRMAYETWOgcAgClJNAEAGITWOQDAiGbMowkAANNR0QQAGJHBQAAAMCWJJgAAg9A6BwAYkcFAAAAwJRVNAIARGQwEAABTkmgCADAIrXMAgBEZDAQAAFOSaAIAMAitcwCAERl1DgAAU1LRBAAYkcFAAAAwJYkmAACD0DoHABiRwUAAADAlFU0AgBF1zyx2CKNR0QQAYBASTQAABqF1DgAwohmDgQAAYDoqmgAAI2orAwEAwHQkmgAADELrHABgRAYDAQDAlFQ0AQBGZDAQAABMSaIJAMAgtM4BAEY0o3UOAADTkWgCADAIrXMAgBG1eTQBAGA6KpoAACMyjyYAAExJogkAwCC0zgEARjRjMBAAAExHRRMAYEQGAwEAwJQkmgAADELrHABgRDNa5wAAMB0VTQCAERkMBAAAU5JoAgAwCK1zAIARWRkIAACmpKIJADAig4EAAGBKEk0AAAahdQ4AMCIrAwEAwJRUNAEARtSmNwIAgOlINAEAGITWOQDAiAwGAgCAKUk0AQAYhNY5AMCILEEJAABTUtEEABiReTQBAGBKEk0AAAahdQ4AMCKDgQAAYEoqmgAAI1LRBACAKUk0AQD4KVV1aFX9Z1X9V1W94MZcQ+scAGBEy6FxXlWrk7wxyUOSXJLkzKr6cHeftzXXUdEEAGBjByX5r+7+Wnf/KMn7kxy2tRdZshXN63/0zVrsGFh6qurI7l672HEAS5/fFyxVSyHHqaojkxw5Z9fajf572TfJN+ZsX5Lkl7f2PiqaLDdHbvkUgCR+X8Bmdffa7j5gzmvjv5RtKhne6q6/RBMAgI1dkuS2c7Zvk+TSrb2IRBMAgI2dmWT/qrpDVe2U5LeTfHhrL7Jkn9GEzfC8FbBQfl/AjdTd11fV05J8LMnqJG/v7i9v7XVqJc1ODwDAeLTOAQAYhEQTAIBBSDQZRVV1Vf3NnO3nVNVLt/IaD6+qs6rq/Kr6SlX99WT/S6vqOZP3O1fVx6vq6Mn2+qo6p6q+XFVfqKpnVZU/97DMVdWtqur9VXVhVZ1XVR+tqp+rqnPnnPOHVfW5qtqjqt5ZVRdNfg98tareVVX7Lub3ACuB/+EylmuTPKaqbnljPlxVd01ybJIndfcvJLlrkq9tdM5OST6Y5Ozuftlk9zXdfc/u/sXMLqP1iCRH38jvAVgCqqqSnJjk9O7+2e6+S5IXJtlnzjlPTvL0JA/t7u9Odj+3u++R5OeTfD7JJya/N4CBSDQZy/WZHQH6zI0PVNXtq+q0qvri5OvtNvH55yV5ZXd/JZkdDdfdfzfn+A6ZXR7rgu5+waYC6O7LMzuB89Mm/6MClqcHJ7muu/9+w47uPieTVUyq6nFJXpDZJPPbG3+4Z/1tkm8lefgoEcMKJdFkTG9M8sSquvlG+49N8q7uvnuS9yR5/SY+e9ckZ89z7eclub67j5ovgO7+Wmb/3O+90KCBJWe+3we3z+zvlId297e2cJ3PJbnztgwMuCGJJqPp7u8leVeSP93o0H2TvHfy/t1JfuVGXP5TSe5bVT+3gHNVM2H7dUWSi5M8bgHn+l0AA5NoMrbXJjkiyW7znLOpyV2/nOSX5vnMGUmOSvKPVXXrzZ1UVXdMsj7J5VsKFFiy5vt98IPMtsOfWlVP3MJ17pXk/G0ZGHBDEk1G1d3fSXJCZpPNDf4ts0tbJckTM1ud3NhrkrxwQ8WyqlZV1bM2uvYHJ+f9U1X9zMYXqKq9kvx9kmPbSgWwnP1LkptU1R9u2FFVB2a2bZ7uviLJoUleVVUP2/jDNetPk6xJ8k/jhAwrk0STxfA3SeaOPv/TJE+pqi8meXKSZ2z8ge7+YmYrlu+rqvOTnJvZ/0lsfN7fJ/lQkg9X1c5JdtkwvVGSf05yapKXbfw5YPmY/EXxN5M8ZDK90ZeTvDTJpXPOuSjJo5K8vap+ebL7NVX1hSRfTXJgkgd3949GDR5WGEtQAgAwCBVNAAAGIdEEAGAQEk0AAAYh0QQAYBASTQAABiHRBLZKVa2fTBl1blV9oKp2neJa76yq/2/y/q1VdZd5zj24qu53I+7x9aq65ZbPTKrq96rq2K29BwCbJtEEttY13X3P7r5rkh8leercg1W1+sZctLv/oLvPm+eUg5NsdaIJwOKRaALT+GSSO02qjZ+oqvcm+VJVra6q11TVmVX1xar6o+THK7IcW1XnVdUpSfbecKGqOr2qDpi8P7SqPldVX6iq06pqv8wmtM+cVFMfUFV7VdUHJ/c4s6ruP/nsLarq1Kr6fFW9OZtZz3rje2zi+COr6j8m1/nnqtpnsv9BkxjOmRzbvarWVNUZcyq9D9imP2WAZWqHxQ4AWJ6qaofMrim9YQm/g5Lctbsvqqojk/xvdx9YVTdJ8umqOjWza0v/fJK7JdknyXlJ3r7RdfdK8pYkD5xca8/u/k5V/X2S73f3X0/Oe2+Sv+3uT1XV7ZJ8LMkvJDk6yae6++VV9etJjtxE7D91j018i59Kcp/u7qr6gyTPS/LsJM9J8ifd/emqummSH07u8bHufuWkonujHycA2J5INIGttUtVnTN5/8kkb8tsS/uzk2X/kuShSe6+4fnLJDdPsn+SByZ5X3evT3JpVf3LJq5/nyRnbLhWd39nM3H8WpK7VP24YHmzqtp9co/HTD57SlV990be4zZJjq+qNUl2SrLhe/t0kmOq6j1JPtTdl1TVmZld6nDHJP+vu8/ZxPUAVhytc2BrbXhG857d/fQ5a0VfPeecSvL0OefdobtPnRzb0rq3tYBzktnfX/edc499u/uqbXiPNyQ5trvvluSPkuycJN396iR/kGSXJP9eVXfu7jMym+B+M8m7q+p3FxA/wHZPogkM4WNJ/s+kwpeq+rmq2i3JGUl+e/IM55okD97EZz+T5EFVdYfJZze0ta9Ksvuc805N8rQNG1V1z8nbM5I8cbLv4Un22Ip7zHXzzCaOSXL4nPv8bHd/qbv/MslZSe5cVbdPcnl3vyWzFd57b+J6ACuORBMYwlsz+/zl56rq3CRvzuyjOicmuSDJl5K8Kcm/bvzB7r4is888fqiqvpDk+Mmhk5P85obBQEn+NMkBk8FG5+Uno99fluSBVfW5zLbwL96Ke8z10iQfqKpPJvn2nP1HTQb8fCHJNUn+MbMj4s+pqs8n+a0kr9vyjwhg+1fdC+lQAQDA1lHRBABgEBJNAAAGIdEEAGAQEk0AAAYh0QQAYBASTQAABiHRBABgEP8/GUednDYtqY4AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Isolation Forest: 28\n",
"0.65\n",
" precision recall f1-score support\n",
"\n",
" 0 0.00 0.00 0.00 28\n",
" 1 0.65 1.00 0.79 52\n",
"\n",
" accuracy 0.65 80\n",
" macro avg 0.33 0.50 0.39 80\n",
"weighted avg 0.42 0.65 0.51 80\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1248: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n",
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1248: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n",
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1248: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 648x504 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#evaluation of the model\n",
"#printing every score of the classifier\n",
"#scoring in any thing\n",
"\n",
"from sklearn.metrics import confusion_matrix\n",
"n_outliers = len(have)\n",
"print(\"the Model used is {}\".format(\"Isolation Forest\"))\n",
"acc= accuracy_score(Y_test,y_pred)\n",
"print(\"The accuracy is {}\".format(acc))\n",
"prec= precision_score(Y_test,y_pred)\n",
"print(\"The precision is {}\".format(prec))\n",
"rec= recall_score(Y_test,y_pred)\n",
"print(\"The recall is {}\".format(rec))\n",
"f1= f1_score(Y_test,y_pred)\n",
"print(\"The F1-Score is {}\".format(f1))\n",
"MCC=matthews_corrcoef(Y_test,y_pred)\n",
"print(\"The Matthews correlation coefficient is{}\".format(MCC))\n",
"\n",
"#printing the confusion matrix\n",
"LABELS = ['No CKD', 'CKD']\n",
"conf_matrix = confusion_matrix(Y_test, y_pred)\n",
"plt.figure(figsize=(12, 12))\n",
"sns.heatmap(conf_matrix, xticklabels=LABELS,\n",
" yticklabels=LABELS, annot=True, fmt=\"d\");\n",
"plt.title(\"Confusion matrix\")\n",
"plt.ylabel('True class')\n",
"plt.xlabel('Predicted class')\n",
"plt.show()\n",
"\n",
"# Run classification metrics\n",
"plt.figure(figsize=(9, 7))\n",
"print('{}: {}'.format(\"Isolation Forest\", n_errors))\n",
"print(accuracy_score(Y_test, y_pred))\n",
"print(classification_report(Y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "5d548aa6",
"metadata": {},
"source": [
"#### Random Forest Classifier"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "c41d3b76",
"metadata": {},
"outputs": [],
"source": [
"# Building the Random Forest Classifier (RANDOM FOREST)\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"# random forest model creation\n",
"rfc = RandomForestClassifier()\n",
"rfc.fit(X_train,Y_train)\n",
"# predictions\n",
"y_pred = rfc.predict(X_test)"
]
},
{
"cell_type": "markdown",
"id": "5821ec3c",
"metadata": {},
"source": [
"### Model eveuation"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "6284b00a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The model used is Random Forest classifier\n",
"The accuracy is 0.9875\n",
"The precision is 1.0\n",
"The recall is 0.9807692307692307\n",
"The F1-Score is 0.9902912621359222\n",
"The Matthews correlation coefficient is 0.9731133552274452\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random Forest: 1\n",
"0.9875\n",
" precision recall f1-score support\n",
"\n",
" 0 0.97 1.00 0.98 28\n",
" 1 1.00 0.98 0.99 52\n",
"\n",
" accuracy 0.99 80\n",
" macro avg 0.98 0.99 0.99 80\n",
"weighted avg 0.99 0.99 0.99 80\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 648x504 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Evaluating the classifier\n",
"#printing every score of the classifier\n",
"#scoring in any thing\n",
"from sklearn.metrics import classification_report, accuracy_score,precision_score,recall_score,f1_score,matthews_corrcoef\n",
"from sklearn.metrics import confusion_matrix\n",
"n_outliers = len(have)\n",
"n_errors = (y_pred != Y_test).sum()\n",
"print(\"The model used is Random Forest classifier\")\n",
"acc= accuracy_score(Y_test,y_pred)\n",
"print(\"The accuracy is {}\".format(acc))\n",
"prec= precision_score(Y_test,y_pred)\n",
"print(\"The precision is {}\".format(prec))\n",
"rec= recall_score(Y_test,y_pred)\n",
"print(\"The recall is {}\".format(rec))\n",
"f1= f1_score(Y_test,y_pred)\n",
"print(\"The F1-Score is {}\".format(f1))\n",
"MCC=matthews_corrcoef(Y_test,y_pred)\n",
"print(\"The Matthews correlation coefficient is {}\".format(MCC))\n",
"\n",
"\n",
"#printing the confusion matrix\n",
"LABELS = ['No CKD', 'CKD']\n",
"conf_matrix = confusion_matrix(Y_test, y_pred)\n",
"plt.figure(figsize=(12, 12))\n",
"sns.heatmap(conf_matrix, xticklabels=LABELS, yticklabels=LABELS, annot=True, fmt=\"d\");\n",
"plt.title(\"Confusion matrix\")\n",
"plt.ylabel('True class')\n",
"plt.xlabel('Predicted class')\n",
"plt.show()\n",
"\n",
"# Run classification metrics\n",
"plt.figure(figsize=(9, 7))\n",
"print('{}: {}'.format(\"Random Forest\", n_errors))\n",
"print(accuracy_score(Y_test, y_pred))\n",
"print(classification_report(Y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "70d77af8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random forest model accuracy: 0.9875\n"
]
}
],
"source": [
"# calculate and print the accuracy of the model on the test set\n",
"accuracy = rfc.score(X_test, Y_test)\n",
"print(\"Random forest model accuracy:\", accuracy)"
]
},
{
"cell_type": "markdown",
"id": "5df8ea16",
"metadata": {},
"source": [
"### Saving the model"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "02faf4e6",
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"filename = 'finalized_model_kidney_prediction_RF.sav'\n",
"pickle.dump(rfc, open(filename, 'wb'))"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "896159c4",
"metadata": {},
"outputs": [],
"source": [
"with open('finalized_model_kidney_prediction_RF.sav', 'rb') as f:\n",
" model = pickle.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "03d78684",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0]\n"
]
}
],
"source": [
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"#input_data1 = (70,1.02,0,0,1,44,1.2,145,5,14.8,8406,4.71,0) #0\n",
"input_data2 = (80, 1.02, 1, 36, 1.2, 137.53, 4.63, 15.4, 7800, 5.2, 1) #1\n",
"\n",
"#change input data to numpy array\n",
"input_data_as_numpy_array = np.asarray(input_data2)\n",
"\n",
"#reshape the numpy array as we are predicting for only on instance\n",
"\n",
"input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
"\n",
"prediction = model.predict(input_data_reshaped)\n",
"print(prediction)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "41a76901",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
},
"vscode": {
"interpreter": {
"hash": "d9a6414fa631c028c434667d182c0b79dc634ffcd06f52fc304061a2c0b9ef26"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "NvgOAuTNHnFv",
"outputId": "9af20872-9b69-4105-c9b0-a5189e93f11f"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mounted at /content/drive\n"
]
}
],
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "e5VoXOheOrbn"
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import os\n",
"import shutil\n",
"import random\n",
"metadata = pd.read_csv('/content/drive/MyDrive/Dataset_skin/HAM10000_metadata.csv')\n",
"\n",
"# Define source and destination directories\n",
"src_dir = '/content/drive/MyDrive/Dataset_skin/HAM10000_images_part_1/'\n",
"dst_dir = '/content/newData'\n",
"\n",
"# Create destination directories for each class\n",
"for class_name in metadata['dx'].unique():\n",
" os.makedirs(os.path.join(dst_dir, class_name), exist_ok=True)\n",
"\n",
"# Copy images to their respective class directories\n",
"for index, row in metadata.iterrows():\n",
" img_name = row['image_id'] + '.jpg'\n",
" src_path = os.path.join(src_dir, img_name)\n",
" dst_path = os.path.join(dst_dir, row['dx'], img_name)\n",
" shutil.copy(src_path, dst_path)\n",
" \n",
"print('Dataset splitting complete.')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "wuoNOi_-B0mN"
},
"outputs": [],
"source": [
"!zip -r newData.zip newData/\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "ekUMBoOJB9FL"
},
"outputs": [],
"source": [
"!mv newData.zip /content/drive/MyDrive\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "MNEtNMmmQK6n"
},
"outputs": [],
"source": [
"\n",
"data_dir = '/content/newData'\n",
"train_dir = '/content/train_dir'\n",
"test_dir = '/content/test_dir'\n",
"\n",
"\n",
"# Define list of class names\n",
"class_names = [\"akiec\", \"bcc\", \"bkl\", \"df\", \"mel\", \"nv\", \"vasc\"]\n",
"\n",
"# Create train and test directories if they don't exist\n",
"if not os.path.exists(train_dir):\n",
" os.makedirs(train_dir)\n",
"if not os.path.exists(test_dir):\n",
" os.makedirs(test_dir)\n",
"\n",
"# Split data into train and test sets\n",
"for class_name in class_names:\n",
" class_dir = os.path.join(data_dir, class_name)\n",
" train_class_dir = os.path.join(train_dir, class_name)\n",
" test_class_dir = os.path.join(test_dir, class_name)\n",
" if not os.path.exists(train_class_dir):\n",
" os.makedirs(train_class_dir)\n",
" if not os.path.exists(test_class_dir):\n",
" os.makedirs(test_class_dir)\n",
" files = os.listdir(class_dir)\n",
" random.shuffle(files)\n",
" train_files = files[:int(len(files)*0.8)]\n",
" test_files = files[int(len(files)*0.8):]\n",
" for file in train_files:\n",
" src_path = os.path.join(class_dir, file)\n",
" dst_path = os.path.join(train_class_dir, file)\n",
" shutil.copy(src_path, dst_path)\n",
" for file in test_files:\n",
" src_path = os.path.join(class_dir, file)\n",
" dst_path = os.path.join(test_class_dir, file)\n",
" shutil.copy(src_path, dst_path)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "35cL5WbTA_Cr",
"outputId": "fff6d9c7-767d-40bb-da34-ee32b4ba51ec"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 8010 images belonging to 7 classes.\n",
"Found 2005 images belonging to 7 classes.\n"
]
}
],
"source": [
"import os\n",
"import numpy as np\n",
"import tensorflow as tf\n",
"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n",
"\n",
"# Define data paths and parameters\n",
"train_dir = '/content/train_dir/'\n",
"test_dir = '/content/test_dir/'\n",
"input_shape = (224, 224, 3)\n",
"batch_size = 32\n",
"epochs = 50\n",
"num_classes = 7\n",
"\n",
"# Create data generators with data augmentation\n",
"train_datagen = ImageDataGenerator(rescale=1./255,\n",
" rotation_range=40,\n",
" width_shift_range=0.2,\n",
" height_shift_range=0.2,\n",
" shear_range=0.2,\n",
" zoom_range=0.2,\n",
" horizontal_flip=True,\n",
" fill_mode='nearest')\n",
"test_datagen = ImageDataGenerator(rescale=1./255)\n",
"\n",
"train_generator = train_datagen.flow_from_directory(train_dir,\n",
" target_size=input_shape[:2],\n",
" batch_size=batch_size,\n",
" class_mode='categorical')\n",
"\n",
"test_generator = test_datagen.flow_from_directory(test_dir,\n",
" target_size=input_shape[:2],\n",
" batch_size=batch_size,\n",
" class_mode='categorical')\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "UTqAmayWFPCF"
},
"outputs": [],
"source": [
"# Define the model architecture\n",
"model = Sequential()\n",
"model.add(Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))\n",
"model.add(MaxPooling2D((2, 2)))\n",
"model.add(Conv2D(64, (3, 3), activation='relu'))\n",
"model.add(MaxPooling2D((2, 2)))\n",
"model.add(Conv2D(128, (3, 3), activation='relu'))\n",
"model.add(MaxPooling2D((2, 2)))\n",
"model.add(Conv2D(128, (3, 3), activation='relu'))\n",
"model.add(MaxPooling2D((2, 2)))\n",
"model.add(Flatten())\n",
"model.add(Dense(512, activation='relu'))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(num_classes, activation='softmax'))\n",
"\n",
"# Compile the model\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer='rmsprop',\n",
" metrics=['accuracy'])\n",
"\n",
"# Train the model\n",
"history = model.fit(train_generator,\n",
" steps_per_epoch=train_generator.samples//batch_size,\n",
" epochs=epochs,\n",
" validation_data=test_generator,\n",
" validation_steps=test_generator.samples//batch_size)\n",
"\n",
"# Save the model\n",
"model.save('skin_cancer_model.h5')\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"gpuClass": "standard",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
{
"cells": [
{
"cell_type": "markdown",
"id": "d4f44a2e",
"metadata": {
"id": "d4f44a2e"
},
"source": [
"## Title - **Melanoma Tumor Size Prediction**\n",
"## Used Algorithm - **Liner Regression**\n",
"\n",
"\n",
"## Accuracy\n",
"* Accuracy on Isolation Forest : 90%\n",
"* Accuracy on Random Forest : 93%"
]
},
{
"cell_type": "markdown",
"id": "e555e9d8",
"metadata": {
"id": "e555e9d8"
},
"source": [
"### Importing the dependancies"
]
},
{
"cell_type": "code",
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Lr8KJqCxamQm",
"outputId": "3610dc7a-6a5b-489a-af1e-2f9af9f9afbc"
},
"id": "Lr8KJqCxamQm",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from google.colab import files\n",
"files.upload()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 90
},
"id": "x73tDO5fanhd",
"outputId": "20d2a8fa-66ff-4df5-990d-de9d4c1418cf"
},
"id": "x73tDO5fanhd",
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"\n",
" <input type=\"file\" id=\"files-0551e200-59b6-43e1-9f54-d379d1013939\" name=\"files[]\" multiple disabled\n",
" style=\"border:none\" />\n",
" <output id=\"result-0551e200-59b6-43e1-9f54-d379d1013939\">\n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script>// Copyright 2017 Google LLC\n",
"//\n",
"// Licensed under the Apache License, Version 2.0 (the \"License\");\n",
"// you may not use this file except in compliance with the License.\n",
"// You may obtain a copy of the License at\n",
"//\n",
"// http://www.apache.org/licenses/LICENSE-2.0\n",
"//\n",
"// Unless required by applicable law or agreed to in writing, software\n",
"// distributed under the License is distributed on an \"AS IS\" BASIS,\n",
"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
"// See the License for the specific language governing permissions and\n",
"// limitations under the License.\n",
"\n",
"/**\n",
" * @fileoverview Helpers for google.colab Python module.\n",
" */\n",
"(function(scope) {\n",
"function span(text, styleAttributes = {}) {\n",
" const element = document.createElement('span');\n",
" element.textContent = text;\n",
" for (const key of Object.keys(styleAttributes)) {\n",
" element.style[key] = styleAttributes[key];\n",
" }\n",
" return element;\n",
"}\n",
"\n",
"// Max number of bytes which will be uploaded at a time.\n",
"const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
"\n",
"function _uploadFiles(inputId, outputId) {\n",
" const steps = uploadFilesStep(inputId, outputId);\n",
" const outputElement = document.getElementById(outputId);\n",
" // Cache steps on the outputElement to make it available for the next call\n",
" // to uploadFilesContinue from Python.\n",
" outputElement.steps = steps;\n",
"\n",
" return _uploadFilesContinue(outputId);\n",
"}\n",
"\n",
"// This is roughly an async generator (not supported in the browser yet),\n",
"// where there are multiple asynchronous steps and the Python side is going\n",
"// to poll for completion of each step.\n",
"// This uses a Promise to block the python side on completion of each step,\n",
"// then passes the result of the previous step as the input to the next step.\n",
"function _uploadFilesContinue(outputId) {\n",
" const outputElement = document.getElementById(outputId);\n",
" const steps = outputElement.steps;\n",
"\n",
" const next = steps.next(outputElement.lastPromiseValue);\n",
" return Promise.resolve(next.value.promise).then((value) => {\n",
" // Cache the last promise value to make it available to the next\n",
" // step of the generator.\n",
" outputElement.lastPromiseValue = value;\n",
" return next.value.response;\n",
" });\n",
"}\n",
"\n",
"/**\n",
" * Generator function which is called between each async step of the upload\n",
" * process.\n",
" * @param {string} inputId Element ID of the input file picker element.\n",
" * @param {string} outputId Element ID of the output display.\n",
" * @return {!Iterable<!Object>} Iterable of next steps.\n",
" */\n",
"function* uploadFilesStep(inputId, outputId) {\n",
" const inputElement = document.getElementById(inputId);\n",
" inputElement.disabled = false;\n",
"\n",
" const outputElement = document.getElementById(outputId);\n",
" outputElement.innerHTML = '';\n",
"\n",
" const pickedPromise = new Promise((resolve) => {\n",
" inputElement.addEventListener('change', (e) => {\n",
" resolve(e.target.files);\n",
" });\n",
" });\n",
"\n",
" const cancel = document.createElement('button');\n",
" inputElement.parentElement.appendChild(cancel);\n",
" cancel.textContent = 'Cancel upload';\n",
" const cancelPromise = new Promise((resolve) => {\n",
" cancel.onclick = () => {\n",
" resolve(null);\n",
" };\n",
" });\n",
"\n",
" // Wait for the user to pick the files.\n",
" const files = yield {\n",
" promise: Promise.race([pickedPromise, cancelPromise]),\n",
" response: {\n",
" action: 'starting',\n",
" }\n",
" };\n",
"\n",
" cancel.remove();\n",
"\n",
" // Disable the input element since further picks are not allowed.\n",
" inputElement.disabled = true;\n",
"\n",
" if (!files) {\n",
" return {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
" }\n",
"\n",
" for (const file of files) {\n",
" const li = document.createElement('li');\n",
" li.append(span(file.name, {fontWeight: 'bold'}));\n",
" li.append(span(\n",
" `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
" `last modified: ${\n",
" file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() :\n",
" 'n/a'} - `));\n",
" const percent = span('0% done');\n",
" li.appendChild(percent);\n",
"\n",
" outputElement.appendChild(li);\n",
"\n",
" const fileDataPromise = new Promise((resolve) => {\n",
" const reader = new FileReader();\n",
" reader.onload = (e) => {\n",
" resolve(e.target.result);\n",
" };\n",
" reader.readAsArrayBuffer(file);\n",
" });\n",
" // Wait for the data to be ready.\n",
" let fileData = yield {\n",
" promise: fileDataPromise,\n",
" response: {\n",
" action: 'continue',\n",
" }\n",
" };\n",
"\n",
" // Use a chunked sending to avoid message size limits. See b/62115660.\n",
" let position = 0;\n",
" do {\n",
" const length = Math.min(fileData.byteLength - position, MAX_PAYLOAD_SIZE);\n",
" const chunk = new Uint8Array(fileData, position, length);\n",
" position += length;\n",
"\n",
" const base64 = btoa(String.fromCharCode.apply(null, chunk));\n",
" yield {\n",
" response: {\n",
" action: 'append',\n",
" file: file.name,\n",
" data: base64,\n",
" },\n",
" };\n",
"\n",
" let percentDone = fileData.byteLength === 0 ?\n",
" 100 :\n",
" Math.round((position / fileData.byteLength) * 100);\n",
" percent.textContent = `${percentDone}% done`;\n",
"\n",
" } while (position < fileData.byteLength);\n",
" }\n",
"\n",
" // All done.\n",
" yield {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
"}\n",
"\n",
"scope.google = scope.google || {};\n",
"scope.google.colab = scope.google.colab || {};\n",
"scope.google.colab._files = {\n",
" _uploadFiles,\n",
" _uploadFilesContinue,\n",
"};\n",
"})(self);\n",
"</script> "
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Saving kaggle.json to kaggle (1).json\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'kaggle.json': b'{\"username\":\"mishaneperera\",\"key\":\"fb1e9a2fcad19f92a1d3ebd6e8c8165f\"}'}"
]
},
"metadata": {},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"source": [
"!mkdir -p ~/.kaggle\n",
"!cp kaggle.json ~/.kaggle/"
],
"metadata": {
"id": "g-QxxXqKap_8"
},
"id": "g-QxxXqKap_8",
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"!chmod 600 ~/.kaggle/kaggle.json"
],
"metadata": {
"id": "HSge_gifar5N"
},
"id": "HSge_gifar5N",
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"\n",
"!unzip '/content/drive/MyDrive/Skin tumor/machine-hack-melanoma-tumor-size-prediction.zip'"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "u1IPVt6ZavPc",
"outputId": "64d364dd-ce34-47dc-c74c-778cadcff92a"
},
"id": "u1IPVt6ZavPc",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Archive: /content/drive/MyDrive/Skin tumor/machine-hack-melanoma-tumor-size-prediction.zip\n",
"replace sample_submission.csv? [y]es, [n]o, [A]ll, [N]one, [r]ename: y\n",
" inflating: sample_submission.csv \n",
"replace test.csv? [y]es, [n]o, [A]ll, [N]one, [r]ename: y\n",
" inflating: test.csv \n",
"replace train.csv? [y]es, [n]o, [A]ll, [N]one, [r]ename: y\n",
" inflating: train.csv \n"
]
}
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1123a658",
"metadata": {
"id": "1123a658"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n"
]
},
{
"cell_type": "markdown",
"id": "4e1ec49f",
"metadata": {
"id": "4e1ec49f"
},
"source": [
"### Data collecting process"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "111d33c0",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "111d33c0",
"outputId": "a8a28ca2-0714-4c35-b92d-26ff08273e7e"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" mass_npea size_npear malign_ratio damage_size exposed_area \\\n",
"0 6930.90 2919.02 0.42116 51.8298 9.888294e+05 \n",
"1 15635.70 4879.36 0.31206 223.5500 2.058426e+06 \n",
"2 10376.20 2613.88 0.25191 127.3370 1.434676e+06 \n",
"3 13093.80 4510.06 0.34444 155.4400 1.812195e+06 \n",
"4 7545.21 2882.36 0.38201 85.1237 1.043918e+06 \n",
"\n",
" std_dev_malign err_malign malign_penalty damage_ratio tumor_size \n",
"0 109.487 2758.76 72 39.3620 14.103 \n",
"1 248.881 5952.53 240 22.0253 2.648 \n",
"2 160.093 4635.26 73 29.9963 1.688 \n",
"3 173.015 5273.87 32 28.1354 3.796 \n",
"4 124.414 3263.35 57 35.0200 18.023 "
],
"text/html": [
"\n",
" <div id=\"df-e80b92a4-4456-4112-bb21-72dcd092350c\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>mass_npea</th>\n",
" <th>size_npear</th>\n",
" <th>malign_ratio</th>\n",
" <th>damage_size</th>\n",
" <th>exposed_area</th>\n",
" <th>std_dev_malign</th>\n",
" <th>err_malign</th>\n",
" <th>malign_penalty</th>\n",
" <th>damage_ratio</th>\n",
" <th>tumor_size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>6930.90</td>\n",
" <td>2919.02</td>\n",
" <td>0.42116</td>\n",
" <td>51.8298</td>\n",
" <td>9.888294e+05</td>\n",
" <td>109.487</td>\n",
" <td>2758.76</td>\n",
" <td>72</td>\n",
" <td>39.3620</td>\n",
" <td>14.103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>15635.70</td>\n",
" <td>4879.36</td>\n",
" <td>0.31206</td>\n",
" <td>223.5500</td>\n",
" <td>2.058426e+06</td>\n",
" <td>248.881</td>\n",
" <td>5952.53</td>\n",
" <td>240</td>\n",
" <td>22.0253</td>\n",
" <td>2.648</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>10376.20</td>\n",
" <td>2613.88</td>\n",
" <td>0.25191</td>\n",
" <td>127.3370</td>\n",
" <td>1.434676e+06</td>\n",
" <td>160.093</td>\n",
" <td>4635.26</td>\n",
" <td>73</td>\n",
" <td>29.9963</td>\n",
" <td>1.688</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>13093.80</td>\n",
" <td>4510.06</td>\n",
" <td>0.34444</td>\n",
" <td>155.4400</td>\n",
" <td>1.812195e+06</td>\n",
" <td>173.015</td>\n",
" <td>5273.87</td>\n",
" <td>32</td>\n",
" <td>28.1354</td>\n",
" <td>3.796</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>7545.21</td>\n",
" <td>2882.36</td>\n",
" <td>0.38201</td>\n",
" <td>85.1237</td>\n",
" <td>1.043918e+06</td>\n",
" <td>124.414</td>\n",
" <td>3263.35</td>\n",
" <td>57</td>\n",
" <td>35.0200</td>\n",
" <td>18.023</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-e80b92a4-4456-4112-bb21-72dcd092350c')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-e80b92a4-4456-4112-bb21-72dcd092350c button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-e80b92a4-4456-4112-bb21-72dcd092350c');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
]
},
"metadata": {},
"execution_count": 50
}
],
"source": [
"dataset = pd.read_csv('/content/train.csv')\n",
"dataset.head()"
]
},
{
"cell_type": "markdown",
"id": "5da5cf75",
"metadata": {
"id": "5da5cf75"
},
"source": [
"### Explore the dataset"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "740f14ff",
"metadata": {
"id": "740f14ff"
},
"outputs": [],
"source": [
"X = dataset.iloc[:,:-1].values #independent variable array\n",
"y = dataset.iloc[:,1].values #dependent variable vector"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7c8d2381",
"metadata": {
"id": "7c8d2381"
},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=1/3,random_state=0)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e535ee6f",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 75
},
"id": "e535ee6f",
"outputId": "8b64e058-1606-4284-82dd-de77f9a70f70"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LinearRegression()"
],
"text/html": [
"<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LinearRegression</label><div class=\"sk-toggleable__content\"><pre>LinearRegression()</pre></div></div></div></div></div>"
]
},
"metadata": {},
"execution_count": 54
}
],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"regressor = LinearRegression()\n",
"regressor.fit(X_train,y_train) #actually produces the linear eqn for the data\n",
"\n"
]
},
{
"cell_type": "code",
"source": [
"accuracy=regressor.score(X_train,y_train)\n",
"print(accuracy)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "5BGEhbFxpjxB",
"outputId": "47340ca9-a7ad-484a-9dc7-61cace4b5c4b"
},
"id": "5BGEhbFxpjxB",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"1.0\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d21cf5f8",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "d21cf5f8",
"outputId": "19c58cf8-d471-46fa-8380-6827494e6042"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([3564.2 , 2081.8 , 3567.24, ..., 2344.44, 4253.25, 2881.7 ])"
]
},
"metadata": {},
"execution_count": 55
}
],
"source": [
"y_pred = regressor.predict(X_test) \n",
"y_pred"
]
},
{
"cell_type": "markdown",
"id": "f0e0e01a",
"metadata": {
"id": "f0e0e01a"
},
"source": [
"### Checking the distribution of target variable\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cf5c2e23",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 853
},
"id": "cf5c2e23",
"outputId": "21f84128-1406-40a8-cec7-31ad93d9474b"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1200x900 with 2 Axes>"
],
"image/png": "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pCTp9OnTuuOOO9SsWTNt375dq1ev1rFjx9SjRw/H8Tk5OUpISND27du1bt06eXh4qFu3brL95WH2kSNH6plnnlFaWpqio6Ov6Z4CAAAAgJlY7CXwAdedO3eqRYsWOnLkiGrUqOH0WWxsrE6fPq3ly5c77T9//rw6duyooKAgrVixQh4eHnr88cdVqlQp/fe//3Ws27hxozp06KCcnBx5eXldMY7Q0FC1a9dO7777riTJbrcrJCRE48eP16BBg3TkyBHVrFlTkydP1ogRIyRJFy9eVM2aNfXUU0/pueee04svvqivv/5aa9ascZz3p59+UrVq1ZSenq569eoVuO6JEycUFBSkb7/9Vo0aNXJcZ9q0aXrmmWcuG29ubq5yc3Od9nn89rOsVusVvycgSRfXzjM6BLdT+s7HjA4BKLEu7vjU6BDcT2lPoyNwS7Xun2Z0CG5nb7sgo0NwOxU+3nD1RW7q95VTjA5BkuT9z2FGh1DsSmRlt0mTJurUqZMiIiL04IMPas6cOfr111+veEzfvn3122+/aeHChfLwuPS1d+/erblz58rHx8exRUdHy2az6fvvvy9SLI0bN3b82WKxKCQkRMePH3da07p1a8efS5curcjISKWlpTli+PLLL51iqF+/viQ5WpUPHjyoXr16qVatWvLz81NoaKgkKTMz0+k6kZGRV4w1KSlJ/v7+TtvL02cV6XsCAAAAQElSIgdUlSpVSmvXrtWmTZv0+eefa+bMmXr++ee1ZcuWQte/+OKLWrNmjbZu3SpfX1/H/uzsbA0cOFBPP/10gWOqV69epFj+OgTKYrEUaC++kuzsbMXExOjll18u8FnlypUlSTExMapRo4bmzJmjKlWqyGazqVGjRsrLy3NaX65cuSteKzExUQkJCU77PH77ucixAgAAAChmDKhymRKZ7EqXksq2bduqbdu2Gjt2rGrUqKFly5YVWLd06VJNmDBBn332mWrXru30WfPmzbV//37VqVPHpbF+8803jueEL168qB07djieC27evLmWLl2q0NBQlS5d8B/HyZMnlZ6erjlz5qhdu3aSLrVaXw+r1VqgZflC3onLrAYAAACAkqtEtjFv2bJFkyZN0vbt25WZmamPPvpIv/zyi8LDw53W7d27V3369NGIESPUsGFDZWVlKSsrS6dOnZIkjRgxQps2bVJ8fLxSU1N18OBB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fltBQUHav3+/GjVqpIULF8pisWjOnDny8vJSgwYN9PPPP6t///6OY1577TU1a9ZMkyZNcjpPtWrVdODAAdWrV++y3/3o0aO6ePGiunfvrho1akiSIiIiCl1bqlQphYSESJLOnz+vrl27qnXr1ho3bpwkKSkpSb1793YM9apbt65mzJihDh066I033pCXl1eBc+bm5io3N9dpn0durqxW62VjBgAAAOBCJbSNefHixUpISNCsWbPUqlUrTZs2TdHR0UpPT1elSpUKrE9OTlavXr3Upk0beXl56eWXX9Zdd92lffv2qWrVqi6J8W+v7GZkZCgvL0+tWrVy7AsMDFRYWJjj5x07digmJkbVq1eXr6+vOnToIEnKzMx0Olfjxo0dfw4ODlbZsmUdie4f+/7c/nzw4EH16tVLtWrVkp+fn0JDQ53Om56ersaNGzslii1btnS65u7du/Xll1/Kx8fHsdWvX9/x3a6kSZMm6tSpkyIiIvTggw9qzpw5+vXXX694jHQp+f/tt9+0cOFCeXh4OOKYO3euUxzR0dGy2Wz6/vvvCz1PUlKS/P39nbaXp8+66vUBAAAA4M9effVV9e/fX3FxcWrQoIFmzZqlsmXL6u233y50/YIFCzR48GA1bdpU9evX15tvvimbzaZ169a5LEa3G1CVk5Oj6OhoRUdHa8GCBQoKClJmZqaio6OVl5fntLZMmTKOP1ssFqef/9j3R4uyJMXExKhGjRqaM2eOqlSpIpvNpkaNGhU475VkZ2crJiZGL7/8coHPKleufMVjS5UqpbVr12rTpk2OFuvnn39eW7ZsUc2aNQs95sUXX9SaNWu0detW+fr6OsUxcOBAPf300wWOqV69eqHnSkxMVEJCgtM+j99+vmLMAAAAAFzITd6zW1gXqNVqLbQLNC8vTzt27FBiYqJjn4eHh6KiorR58+YiXe/cuXO6cOGCAgMDbyzwK/jbK7u1a9dWmTJltGXLFse+X3/9VQcOHJAkfffddzp58qQmT56sdu3aqX79+k7V2et18uRJpaena/To0erUqZPCw8MLVFXDwsL07bffOv1D3rZtm9Oa5s2ba9++fQoNDVWdOnWctnLlyl01DovForZt22r8+PHatWuXPD09tWzZskLXLl26VBMmTNAHH3yg2rVrF4hj//79BWKoU6eOPD09Cz2f1WqVn5+f00YLMwAA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7GzH942Li9OZM2dksVhksVg0btw4SQXbmDMzM3XffffJx8dHfn5+6tGjh44dO1ak2AAAAADAzFye7A4fPlwbNmzQihUr9Pnnnys5OVk7d+50fH7hwgVNnDhRu3fv1vLly3XkyBHFxsYWOM+4ceP02muvadOmTfrxxx/Vo0cPTZs2TQsXLtSqVav0+eefa+bMmY71OTk5SkhI0Pbt27Vu3Tp5eHioW7dustlskqSzZ88qJiZGERER2rlzpyZOnKgRI0Y4XfP06dO644471KxZM23fvl2rV6/WsWPH1KNHjyJ//3nz5snT01MpKSmaNWuWJMnDw0MzZszQvn37NG/ePK1fv17PPfecJKlNmzaaNm2a/Pz8dPToUR09elTDhg0rcF6bzab77rtPp06d0oYNG7R27VodPnxYPXv2LHJsAAAAAIxlk90tNjNyaRtzdna23nrrLb333nvq1KmTpEvJ3y233OJY07dvX8efa9WqpRkzZujWW29Vdna2fHx8HJ+9+OKLatu2rSSpX79+SkxMVEZGhmrVqiVJeuCBB/Tll186Etb777/fKZa3335bQUFB2r9/vxo1aqSFCxfKYrFozpw58vLyUoMGDfTzzz+rf//+jmNee+01NWvWTJMmTXI6T7Vq1XTgwAHVq1fvqvegbt26+te//uW078/DuUJDQ/Xiiy9q0KBB+s9//iNPT0/5+/vLYrEoJCTksuddt26dvv32W33//feqVq2aJGn+/Plq2LChtm3bpltvvbXAMbm5ucrNzXXaZ7fbZbFYrvo9AAAAAKAkcWllNyMjQ3l5eWrVqpVjX2BgoMLCwhw/79ixQzExMapevbp8fX3VoUMHSZdadP+scePGjj8HBwerbNmyjkT3j31/bn8+ePCgevXqpVq1asnPz0+hoaFO501PT1fjxo3l5eXlOKZly5ZO19y9e7e+/PJL+fj4OLb69es7vltRtGjRosC+L774Qp06dVLVqlXl6+urRx99VCdPnnRqw76atLQ0VatWzZHoSlKDBg0UEBCgtLS0Qo9JSkqSv7+/02a3/VbkawIAAABASWHIq4f+kJOTo+joaPn5+WnBggXatm2bli1bJunSMKc/K1OmjOPPFovF6ec/9v3RoixJMTExOnXqlObMmaMtW7Zoy5YthZ73SrKzsxUTE6PU1FSn7eDBg2rfvn2RzvHX6clHjhzR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BiorK+uyx33wwQfq2bOnKlSooNKlS6ts2bJatmyZ6tSpU+Rrl7jKbseOHTVkyBCjw3CJ6dOna+7cuUaHAQAAAOAmY7Va5efn57RdKdkdOXKkLBbLFbfvvvvuuuMZM2aMTp8+rS+++ELbt29XQkKCevTooW+//bbI56CyW4zy8vLk6el53cf7+/sXYzQAAAAA4BrPPvusYmNjr7imVq1aCgkJ0fHjx532X7x4UadOnVJISEihx2VkZOi1117T3r171bBhQ0lSkyZN9PXXX+v111/XrFmzihRjiarsxsbGasOGDZo+fbrjtwVz585VQECA07rly5fLYrE4fh43bpyaNm2qt99+W9WrV5ePj48GDx6s/Px8/etf/1JISIgqVaqkl156yek8mZmZuu++++Tj4yM/Pz/16NFDx44dK3DeN998UzVr1pSXl9dVv8OSJUsUEREhb29vVahQQVFRUcrJyXF8v65du0qSjhw5UuhvR/7co75x40a1a9dO3t7eqlatmp5++mnHuQAAAAC4P5vsbrFdq6CgINWvX/+Km6enp1q3bq3Tp087DZZav369bDabWrVqVei5z507J0ny8HBOV0uVKiWbzVbkGEtUsjt9+nS1bt1a/fv319GjR3X06FHl5+cX6diMjAx99tlnWr16td5//3299dZbuueee/TTTz9pw4YNevnllzV69GjHQ9I2m0333XefTp06pQ0bNmjt2rU6fPiwevbs6XTeQ4cOaenSpfroo4+Umpp6xRiOHj2qXr16qW/fvkpLS1NycrK6d+9eaJ9+tWrVHN/x6NGj2rVrlypUqKD27ds7vk/nzp11//33a8+ePVq8eLE2btyo+Pj4It0PAAAAAHC18PBwde7cWf3799fWrVuVkpKi+Ph4PfTQQ6pSpYok6eeff1b9+vW1detWSVL9+vVVp04dDRw4UFu3blVGRoamTp2qtWvXOoqDRVGi2pj9/f3l6empsmXLOkrepUqVKtKxNptNb7/9tnx9fdWgQQPdfvvtSk9P16effioPDw+FhYXp5Zdf1pdffqlWrVpp3bp1+vbbb/X999+rWrVqkqT58+erYcOG2rZtm2699VZJl1qX58+fr6CgoKvGcPToUV28eFHdu3dXjRo1JEkRERGFri1VqpTjO54/f15du3ZV69atNW7cOEmXpqX17t3b8fxy3bp1NWPGDHXo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\n"
},
"metadata": {}
}
],
"source": [
"import seaborn as sns\n",
"# Correlation matrix\n",
"corrmat = dataset.corr()\n",
"fig = plt.figure(figsize = (12, 9))\n",
"\n",
"sns.heatmap(corrmat, vmax = .8, square = True)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "38ffa726",
"metadata": {
"id": "38ffa726"
},
"source": [
"### Splitting the features and target"
]
},
{
"cell_type": "markdown",
"id": "5df8ea16",
"metadata": {
"id": "5df8ea16"
},
"source": [
"### Saving the model"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "02faf4e6",
"metadata": {
"id": "02faf4e6"
},
"outputs": [],
"source": [
"import pickle\n",
"filename = 'finalized_model_skinT_prediction_RF.sav'\n",
"pickle.dump(regressor, open(filename, 'wb'))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "896159c4",
"metadata": {
"id": "896159c4"
},
"outputs": [],
"source": [
"with open('finalized_model_skinT_prediction_RF.sav', 'rb') as f:\n",
" model = pickle.load(f)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "03d78684",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "03d78684",
"outputId": "39dc528d-b12e-4716-e42b-40879e4f7698"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[4510.06]\n"
]
}
],
"source": [
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"#input_data1 = (70,1.02,0,0,1,44,1.2,145,5,14.8,8406,4.71,0) #0\n",
"input_data2 = (13093.8,4510.06,0.34444,155.44,1812195.1833,173.015,5273.87,32,28.1354) #1\n",
"\n",
"#change input data to numpy array\n",
"input_data_as_numpy_array = np.asarray(input_data2)\n",
"\n",
"#reshape the numpy array as we are predicting for only on instance\n",
"\n",
"input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
"\n",
"prediction = model.predict(input_data_reshaped)\n",
"print(prediction)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "41a76901",
"metadata": {
"id": "41a76901"
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
},
"vscode": {
"interpreter": {
"hash": "d9a6414fa631c028c434667d182c0b79dc634ffcd06f52fc304061a2c0b9ef26"
}
},
"colab": {
"provenance": [],
"collapsed_sections": [
"e8dd7a8f",
"5821ec3c"
]
}
},
"nbformat": 4,
"nbformat_minor": 5
}
\ No newline at end of file
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "NvgOAuTNHnFv",
"outputId": "9af20872-9b69-4105-c9b0-a5189e93f11f"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mounted at /content/drive\n"
]
}
],
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "e5VoXOheOrbn"
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import os\n",
"import shutil\n",
"import random\n",
"metadata = pd.read_csv('/content/drive/MyDrive/Dataset_skin/HAM10000_metadata.csv')\n",
"\n",
"# Define source and destination directories\n",
"src_dir = '/content/drive/MyDrive/Dataset_skin/HAM10000_images_part_1/'\n",
"dst_dir = '/content/newData'\n",
"\n",
"# Create destination directories for each class\n",
"for class_name in metadata['dx'].unique():\n",
" os.makedirs(os.path.join(dst_dir, class_name), exist_ok=True)\n",
"\n",
"# Copy images to their respective class directories\n",
"for index, row in metadata.iterrows():\n",
" img_name = row['image_id'] + '.jpg'\n",
" src_path = os.path.join(src_dir, img_name)\n",
" dst_path = os.path.join(dst_dir, row['dx'], img_name)\n",
" shutil.copy(src_path, dst_path)\n",
" \n",
"print('Dataset splitting complete.')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "wuoNOi_-B0mN"
},
"outputs": [],
"source": [
"!zip -r newData.zip newData/\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "ekUMBoOJB9FL"
},
"outputs": [],
"source": [
"!mv newData.zip /content/drive/MyDrive\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "MNEtNMmmQK6n"
},
"outputs": [],
"source": [
"\n",
"data_dir = '/content/newData'\n",
"train_dir = '/content/train_dir'\n",
"test_dir = '/content/test_dir'\n",
"\n",
"\n",
"# Define list of class names\n",
"class_names = [\"akiec\", \"bcc\", \"bkl\", \"df\", \"mel\", \"nv\", \"vasc\"]\n",
"\n",
"# Create train and test directories if they don't exist\n",
"if not os.path.exists(train_dir):\n",
" os.makedirs(train_dir)\n",
"if not os.path.exists(test_dir):\n",
" os.makedirs(test_dir)\n",
"\n",
"# Split data into train and test sets\n",
"for class_name in class_names:\n",
" class_dir = os.path.join(data_dir, class_name)\n",
" train_class_dir = os.path.join(train_dir, class_name)\n",
" test_class_dir = os.path.join(test_dir, class_name)\n",
" if not os.path.exists(train_class_dir):\n",
" os.makedirs(train_class_dir)\n",
" if not os.path.exists(test_class_dir):\n",
" os.makedirs(test_class_dir)\n",
" files = os.listdir(class_dir)\n",
" random.shuffle(files)\n",
" train_files = files[:int(len(files)*0.8)]\n",
" test_files = files[int(len(files)*0.8):]\n",
" for file in train_files:\n",
" src_path = os.path.join(class_dir, file)\n",
" dst_path = os.path.join(train_class_dir, file)\n",
" shutil.copy(src_path, dst_path)\n",
" for file in test_files:\n",
" src_path = os.path.join(class_dir, file)\n",
" dst_path = os.path.join(test_class_dir, file)\n",
" shutil.copy(src_path, dst_path)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "35cL5WbTA_Cr",
"outputId": "fff6d9c7-767d-40bb-da34-ee32b4ba51ec"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 8010 images belonging to 7 classes.\n",
"Found 2005 images belonging to 7 classes.\n"
]
}
],
"source": [
"import os\n",
"import numpy as np\n",
"import tensorflow as tf\n",
"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n",
"\n",
"# Define data paths and parameters\n",
"train_dir = '/content/train_dir/'\n",
"test_dir = '/content/test_dir/'\n",
"input_shape = (224, 224, 3)\n",
"batch_size = 32\n",
"epochs = 50\n",
"num_classes = 7\n",
"\n",
"# Create data generators with data augmentation\n",
"train_datagen = ImageDataGenerator(rescale=1./255,\n",
" rotation_range=40,\n",
" width_shift_range=0.2,\n",
" height_shift_range=0.2,\n",
" shear_range=0.2,\n",
" zoom_range=0.2,\n",
" horizontal_flip=True,\n",
" fill_mode='nearest')\n",
"test_datagen = ImageDataGenerator(rescale=1./255)\n",
"\n",
"train_generator = train_datagen.flow_from_directory(train_dir,\n",
" target_size=input_shape[:2],\n",
" batch_size=batch_size,\n",
" class_mode='categorical')\n",
"\n",
"test_generator = test_datagen.flow_from_directory(test_dir,\n",
" target_size=input_shape[:2],\n",
" batch_size=batch_size,\n",
" class_mode='categorical')\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "UTqAmayWFPCF"
},
"outputs": [],
"source": [
"# Define the model architecture\n",
"model = Sequential()\n",
"model.add(Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))\n",
"model.add(MaxPooling2D((2, 2)))\n",
"model.add(Conv2D(64, (3, 3), activation='relu'))\n",
"model.add(MaxPooling2D((2, 2)))\n",
"model.add(Conv2D(128, (3, 3), activation='relu'))\n",
"model.add(MaxPooling2D((2, 2)))\n",
"model.add(Conv2D(128, (3, 3), activation='relu'))\n",
"model.add(MaxPooling2D((2, 2)))\n",
"model.add(Flatten())\n",
"model.add(Dense(512, activation='relu'))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(num_classes, activation='softmax'))\n",
"\n",
"# Compile the model\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer='rmsprop',\n",
" metrics=['accuracy'])\n",
"\n",
"# Train the model\n",
"history = model.fit(train_generator,\n",
" steps_per_epoch=train_generator.samples//batch_size,\n",
" epochs=epochs,\n",
" validation_data=test_generator,\n",
" validation_steps=test_generator.samples//batch_size)\n",
"\n",
"# Save the model\n",
"model.save('skin_cancer_model.h5')\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"gpuClass": "standard",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "markdown",
"id": "b1456aec",
"metadata": {},
"source": [
"## Title - **Stroke Prediction**\n",
"## Used Algorithm - **Random Forest Classification**\n",
"## Dataset - \n",
"* The dataset link is [Stroke Prediction Dataset](https://www.kaggle.com/datasets/fedesoriano/stroke-prediction-dataset) and it is from kaggle online website\n",
"* The usability of the dataset is 10.00\n",
"* This dataset has 11 parameters and 5110 instances\n",
"\n",
"## Accuracy\n",
"* Accuracy on Isolation Forest : 90%\n",
"* Accuracy on Random Forest : 93%"
]
},
{
"cell_type": "markdown",
"id": "8a19db0e",
"metadata": {},
"source": [
"### Importing the dependancies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1123a658",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "markdown",
"id": "2a902969",
"metadata": {},
"source": [
"### Data collecting process"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "111d33c0",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"data = pd.read_csv('..//Trained models//healthcare-dataset-stroke-data.csv')"
]
},
{
"cell_type": "markdown",
"id": "9fc14b95",
"metadata": {},
"source": [
"### Explore the dataset"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "740f14ff",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['id', 'gender', 'age', 'hypertension', 'heart_disease', 'ever_married',\n",
" 'work_type', 'Residence_type', 'avg_glucose_level', 'bmi',\n",
" 'smoking_status', 'stroke'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>gender</th>\n",
" <th>age</th>\n",
" <th>hypertension</th>\n",
" <th>heart_disease</th>\n",
" <th>ever_married</th>\n",
" <th>work_type</th>\n",
" <th>Residence_type</th>\n",
" <th>avg_glucose_level</th>\n",
" <th>bmi</th>\n",
" <th>smoking_status</th>\n",
" <th>stroke</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>9046</td>\n",
" <td>Male</td>\n",
" <td>67.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Urban</td>\n",
" <td>228.69</td>\n",
" <td>36.6</td>\n",
" <td>formerly smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>51676</td>\n",
" <td>Female</td>\n",
" <td>61.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Self-employed</td>\n",
" <td>Rural</td>\n",
" <td>202.21</td>\n",
" <td>NaN</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>31112</td>\n",
" <td>Male</td>\n",
" <td>80.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Rural</td>\n",
" <td>105.92</td>\n",
" <td>32.5</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>60182</td>\n",
" <td>Female</td>\n",
" <td>49.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Urban</td>\n",
" <td>171.23</td>\n",
" <td>34.4</td>\n",
" <td>smokes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1665</td>\n",
" <td>Female</td>\n",
" <td>79.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Self-employed</td>\n",
" <td>Rural</td>\n",
" <td>174.12</td>\n",
" <td>24.0</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id gender age hypertension heart_disease ever_married \\\n",
"0 9046 Male 67.0 0 1 Yes \n",
"1 51676 Female 61.0 0 0 Yes \n",
"2 31112 Male 80.0 0 1 Yes \n",
"3 60182 Female 49.0 0 0 Yes \n",
"4 1665 Female 79.0 1 0 Yes \n",
"\n",
" work_type Residence_type avg_glucose_level bmi smoking_status \\\n",
"0 Private Urban 228.69 36.6 formerly smoked \n",
"1 Self-employed Rural 202.21 NaN never smoked \n",
"2 Private Rural 105.92 32.5 never smoked \n",
"3 Private Urban 171.23 34.4 smokes \n",
"4 Self-employed Rural 174.12 24.0 never smoked \n",
"\n",
" stroke \n",
"0 1 \n",
"1 1 \n",
"2 1 \n",
"3 1 \n",
"4 1 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(data.columns)\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7c8d2381",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5110, 12)\n",
" id age hypertension heart_disease \\\n",
"count 5110.000000 5110.000000 5110.000000 5110.000000 \n",
"mean 36517.829354 43.226614 0.097456 0.054012 \n",
"std 21161.721625 22.612647 0.296607 0.226063 \n",
"min 67.000000 0.080000 0.000000 0.000000 \n",
"25% 17741.250000 25.000000 0.000000 0.000000 \n",
"50% 36932.000000 45.000000 0.000000 0.000000 \n",
"75% 54682.000000 61.000000 0.000000 0.000000 \n",
"max 72940.000000 82.000000 1.000000 1.000000 \n",
"\n",
" avg_glucose_level bmi stroke \n",
"count 5110.000000 4909.000000 5110.000000 \n",
"mean 106.147677 28.893237 0.048728 \n",
"std 45.283560 7.854067 0.215320 \n",
"min 55.120000 10.300000 0.000000 \n",
"25% 77.245000 23.500000 0.000000 \n",
"50% 91.885000 28.100000 0.000000 \n",
"75% 114.090000 33.100000 0.000000 \n",
"max 271.740000 97.600000 1.000000 \n"
]
}
],
"source": [
"# Print the shape of the data\n",
"# data = data.sample(frac=0.1, random_state = 48)\n",
"print(data.shape)\n",
"print(data.describe())"
]
},
{
"cell_type": "markdown",
"id": "401acdab",
"metadata": {},
"source": [
"#### update null values"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "016ecaa0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 5110 entries, 0 to 5109\n",
"Data columns (total 12 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 id 5110 non-null int64 \n",
" 1 gender 5110 non-null object \n",
" 2 age 5110 non-null float64\n",
" 3 hypertension 5110 non-null int64 \n",
" 4 heart_disease 5110 non-null int64 \n",
" 5 ever_married 5110 non-null object \n",
" 6 work_type 5110 non-null object \n",
" 7 Residence_type 5110 non-null object \n",
" 8 avg_glucose_level 5110 non-null float64\n",
" 9 bmi 5110 non-null float64\n",
" 10 smoking_status 5110 non-null object \n",
" 11 stroke 5110 non-null int64 \n",
"dtypes: float64(3), int64(4), object(5)\n",
"memory usage: 479.2+ KB\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>gender</th>\n",
" <th>age</th>\n",
" <th>hypertension</th>\n",
" <th>heart_disease</th>\n",
" <th>ever_married</th>\n",
" <th>work_type</th>\n",
" <th>Residence_type</th>\n",
" <th>avg_glucose_level</th>\n",
" <th>bmi</th>\n",
" <th>smoking_status</th>\n",
" <th>stroke</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>9046</td>\n",
" <td>Male</td>\n",
" <td>67.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Urban</td>\n",
" <td>228.69</td>\n",
" <td>36.600000</td>\n",
" <td>formerly smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>51676</td>\n",
" <td>Female</td>\n",
" <td>61.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Self-employed</td>\n",
" <td>Rural</td>\n",
" <td>202.21</td>\n",
" <td>28.893237</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>31112</td>\n",
" <td>Male</td>\n",
" <td>80.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Rural</td>\n",
" <td>105.92</td>\n",
" <td>32.500000</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>60182</td>\n",
" <td>Female</td>\n",
" <td>49.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Urban</td>\n",
" <td>171.23</td>\n",
" <td>34.400000</td>\n",
" <td>smokes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1665</td>\n",
" <td>Female</td>\n",
" <td>79.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Self-employed</td>\n",
" <td>Rural</td>\n",
" <td>174.12</td>\n",
" <td>24.000000</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id gender age hypertension heart_disease ever_married \\\n",
"0 9046 Male 67.0 0 1 Yes \n",
"1 51676 Female 61.0 0 0 Yes \n",
"2 31112 Male 80.0 0 1 Yes \n",
"3 60182 Female 49.0 0 0 Yes \n",
"4 1665 Female 79.0 1 0 Yes \n",
"\n",
" work_type Residence_type avg_glucose_level bmi \\\n",
"0 Private Urban 228.69 36.600000 \n",
"1 Self-employed Rural 202.21 28.893237 \n",
"2 Private Rural 105.92 32.500000 \n",
"3 Private Urban 171.23 34.400000 \n",
"4 Self-employed Rural 174.12 24.000000 \n",
"\n",
" smoking_status stroke \n",
"0 formerly smoked 1 \n",
"1 never smoked 1 \n",
"2 never smoked 1 \n",
"3 smokes 1 \n",
"4 never smoked 1 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = data\n",
"df['bmi']=df['bmi'].fillna(df['bmi'].mean())\n",
"df.info()\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"id": "67f97afc",
"metadata": {},
"source": [
"### Update string data into integer data"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "74074e6f",
"metadata": {},
"outputs": [],
"source": [
"############Gender###############################\n",
"\n",
"data = df.replace(to_replace =\"Male\",\n",
" value =\"0\")\n",
"data = data.replace(to_replace =\"Female\",\n",
" value =\"1\")\n",
"data = data.replace(to_replace =\"Other\",\n",
" value =\"2\")\n",
"\n",
"############ever married#########################\n",
"\n",
"data = data.replace(to_replace =\"Yes\",\n",
" value =\"1\")\n",
"data = data.replace(to_replace =\"No\",\n",
" value =\"0\")\n",
"\n",
"############work type############################\n",
"\n",
"data = data.replace(to_replace =\"Private\",\n",
" value =\"1\")\n",
"data = data.replace(to_replace =\"Self-employed\",\n",
" value =\"0\")\n",
"data = data.replace(to_replace =\"Govt_job\",\n",
" value =\"2\")\n",
"data = data.replace(to_replace =\"children\",\n",
" value =\"3\")\n",
"data = data.replace(to_replace =\"Never_worked\",\n",
" value =\"4\")\n",
"\n",
"############Residence type#######################\n",
"\n",
"data = data.replace(to_replace =\"Urban\",\n",
" value =\"1\")\n",
"data = data.replace(to_replace =\"Rural\",\n",
" value =\"0\")\n",
"\n",
"############smoking status#######################\n",
"\n",
"data = data.replace(to_replace =\"smokes\",\n",
" value =\"0\")\n",
"data = data.replace(to_replace =\"never smoked\",\n",
" value =\"1\")\n",
"data = data.replace(to_replace =\"formerly smoked\",\n",
" value =\"2\")\n",
"data = data.replace(to_replace =\"Unknown\",\n",
" value =\"3\")"
]
},
{
"cell_type": "markdown",
"id": "791343e1",
"metadata": {},
"source": [
"##### Updated dataset"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d21cf5f8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>gender</th>\n",
" <th>age</th>\n",
" <th>hypertension</th>\n",
" <th>heart_disease</th>\n",
" <th>ever_married</th>\n",
" <th>work_type</th>\n",
" <th>Residence_type</th>\n",
" <th>avg_glucose_level</th>\n",
" <th>bmi</th>\n",
" <th>smoking_status</th>\n",
" <th>stroke</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>9046</td>\n",
" <td>0</td>\n",
" <td>67.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>228.69</td>\n",
" <td>36.600000</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>51676</td>\n",
" <td>1</td>\n",
" <td>61.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>202.21</td>\n",
" <td>28.893237</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>31112</td>\n",
" <td>0</td>\n",
" <td>80.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>105.92</td>\n",
" <td>32.500000</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>60182</td>\n",
" <td>1</td>\n",
" <td>49.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>171.23</td>\n",
" <td>34.400000</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1665</td>\n",
" <td>1</td>\n",
" <td>79.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>174.12</td>\n",
" <td>24.000000</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5105</th>\n",
" <td>18234</td>\n",
" <td>1</td>\n",
" <td>80.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>83.75</td>\n",
" <td>28.893237</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5106</th>\n",
" <td>44873</td>\n",
" <td>1</td>\n",
" <td>81.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>125.20</td>\n",
" <td>40.000000</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5107</th>\n",
" <td>19723</td>\n",
" <td>1</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>82.99</td>\n",
" <td>30.600000</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5108</th>\n",
" <td>37544</td>\n",
" <td>0</td>\n",
" <td>51.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>166.29</td>\n",
" <td>25.600000</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5109</th>\n",
" <td>44679</td>\n",
" <td>1</td>\n",
" <td>44.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>85.28</td>\n",
" <td>26.200000</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5110 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" id gender age hypertension heart_disease ever_married work_type \\\n",
"0 9046 0 67.0 0 1 1 1 \n",
"1 51676 1 61.0 0 0 1 0 \n",
"2 31112 0 80.0 0 1 1 1 \n",
"3 60182 1 49.0 0 0 1 1 \n",
"4 1665 1 79.0 1 0 1 0 \n",
"... ... ... ... ... ... ... ... \n",
"5105 18234 1 80.0 1 0 1 1 \n",
"5106 44873 1 81.0 0 0 1 0 \n",
"5107 19723 1 35.0 0 0 1 0 \n",
"5108 37544 0 51.0 0 0 1 1 \n",
"5109 44679 1 44.0 0 0 1 2 \n",
"\n",
" Residence_type avg_glucose_level bmi smoking_status stroke \n",
"0 1 228.69 36.600000 2 1 \n",
"1 0 202.21 28.893237 1 1 \n",
"2 0 105.92 32.500000 1 1 \n",
"3 1 171.23 34.400000 0 1 \n",
"4 0 174.12 24.000000 1 1 \n",
"... ... ... ... ... ... \n",
"5105 1 83.75 28.893237 1 0 \n",
"5106 1 125.20 40.000000 1 0 \n",
"5107 0 82.99 30.600000 1 0 \n",
"5108 0 166.29 25.600000 2 0 \n",
"5109 1 85.28 26.200000 3 0 \n",
"\n",
"[5110 rows x 12 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"id": "988e3c0e",
"metadata": {},
"source": [
"### Checking the distribution of target variable\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "dd942b3b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.051224027977782347\n",
"Stroke Cases: 249\n",
"Not_Stroke: 4861\n"
]
}
],
"source": [
"# Determine number of fraud cases in dataset\n",
"\n",
"Stroke = data[data['stroke'] == 1]\n",
"Not_Stroke = data[data['stroke'] == 0]\n",
"\n",
"outlier_fraction = len(Stroke)/float(len(Not_Stroke))\n",
"print(outlier_fraction)\n",
"\n",
"print('Stroke Cases: {}'.format(len(data[data['stroke'] == 1])))\n",
"print('Not_Stroke: {}'.format(len(data[data['stroke'] == 0])))"
]
},
{
"cell_type": "markdown",
"id": "6e5ac5b6",
"metadata": {},
"source": [
"### Visualizing the dataset"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "cf5c2e23",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x648 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Correlation matrix\n",
"corrmat = data.corr()\n",
"fig = plt.figure(figsize = (12, 9))\n",
"\n",
"sns.heatmap(corrmat, vmax = .8, square = True)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "b9ba5dd2",
"metadata": {},
"source": [
"### Splitting the features and target"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "ad95615d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5110, 10)\n",
"(5110,)\n"
]
}
],
"source": [
"#seperating the X and the Y from the dataset\n",
"X=data.drop(['stroke','id'], axis=1)\n",
"Y=data[\"stroke\"]\n",
"print(X.shape)\n",
"print(Y.shape)\n",
"#getting just the values for the sake of processing (its a numpy array with no columns)\n",
"X_data=X.values\n",
"Y_data=Y.values"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "987d85cc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([['0', 67.0, 0, ..., 228.69, 36.6, '2'],\n",
" ['1', 61.0, 0, ..., 202.21, 28.893236911794673, '1'],\n",
" ['0', 80.0, 0, ..., 105.92, 32.5, '1'],\n",
" ...,\n",
" ['1', 35.0, 0, ..., 82.99, 30.6, '1'],\n",
" ['0', 51.0, 0, ..., 166.29, 25.6, '2'],\n",
" ['1', 44.0, 0, ..., 85.28, 26.2, '3']], dtype=object)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_data"
]
},
{
"cell_type": "markdown",
"id": "acdf7977",
"metadata": {},
"source": [
"### Splittng data into train and test"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "5c0ce1f4",
"metadata": {},
"outputs": [],
"source": [
"# Using Skicit-learn to split data into training and testing sets\n",
"from sklearn.model_selection import train_test_split\n",
"# Split the data into training and testing sets\n",
"X_train, X_test, Y_train, Y_test = train_test_split(X_data, Y_data, test_size = 0.2, random_state = 42)"
]
},
{
"cell_type": "markdown",
"id": "967d0e29",
"metadata": {},
"source": [
"### Model training - Random Forest"
]
},
{
"cell_type": "markdown",
"id": "b036fd27",
"metadata": {},
"source": [
"#### ISOLATION FOREST"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "b41d16ee",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import classification_report, accuracy_score,precision_score,recall_score,f1_score,matthews_corrcoef\n",
"from sklearn.metrics import confusion_matrix"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "53a3cd66",
"metadata": {},
"outputs": [],
"source": [
"#Building another model/classifier ISOLATION FOREST\n",
"from sklearn.ensemble import IsolationForest\n",
"ifc=IsolationForest(max_samples=len(X_train),\n",
" contamination=outlier_fraction,random_state=1)\n",
"ifc.fit(X_train)\n",
"scores_pred = ifc.decision_function(X_train)\n",
"y_pred = ifc.predict(X_test)\n",
"\n",
"\n",
"# Reshape the prediction values to 0 for valid, 1 for fraud. \n",
"y_pred[y_pred == 1] = 0\n",
"y_pred[y_pred == -1] = 1\n",
"\n",
"n_errors = (y_pred != Y_test).sum()"
]
},
{
"cell_type": "markdown",
"id": "ab450ea4",
"metadata": {},
"source": [
"### Model eveuation"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "60c5a8a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"the Model used is Isolation Forest\n",
"The accuracy is 0.9090019569471625\n",
"The precision is 0.2459016393442623\n",
"The recall is 0.24193548387096775\n",
"The F1-Score is 0.24390243902439024\n",
"The Matthews correlation coefficient is0.19550087369423888\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Isolation Forest: 93\n",
"0.9090019569471625\n",
" precision recall f1-score support\n",
"\n",
" 0 0.95 0.95 0.95 960\n",
" 1 0.25 0.24 0.24 62\n",
"\n",
" accuracy 0.91 1022\n",
" macro avg 0.60 0.60 0.60 1022\n",
"weighted avg 0.91 0.91 0.91 1022\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 648x504 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#evaluation of the model\n",
"#printing every score of the classifier\n",
"#scoring in any thing\n",
"\n",
"from sklearn.metrics import confusion_matrix\n",
"n_outliers = len(Stroke)\n",
"print(\"the Model used is {}\".format(\"Isolation Forest\"))\n",
"acc= accuracy_score(Y_test,y_pred)\n",
"print(\"The accuracy is {}\".format(acc))\n",
"prec= precision_score(Y_test,y_pred)\n",
"print(\"The precision is {}\".format(prec))\n",
"rec= recall_score(Y_test,y_pred)\n",
"print(\"The recall is {}\".format(rec))\n",
"f1= f1_score(Y_test,y_pred)\n",
"print(\"The F1-Score is {}\".format(f1))\n",
"MCC=matthews_corrcoef(Y_test,y_pred)\n",
"print(\"The Matthews correlation coefficient is{}\".format(MCC))\n",
"\n",
"#printing the confusion matrix\n",
"LABELS = ['Not Stroke', 'Stroke']\n",
"conf_matrix = confusion_matrix(Y_test, y_pred)\n",
"plt.figure(figsize=(12, 12))\n",
"sns.heatmap(conf_matrix, xticklabels=LABELS,\n",
" yticklabels=LABELS, annot=True, fmt=\"d\");\n",
"plt.title(\"Confusion matrix\")\n",
"plt.ylabel('True class')\n",
"plt.xlabel('Predicted class')\n",
"plt.show()\n",
"\n",
"# Run classification metrics\n",
"plt.figure(figsize=(9, 7))\n",
"print('{}: {}'.format(\"Isolation Forest\", n_errors))\n",
"print(accuracy_score(Y_test, y_pred))\n",
"print(classification_report(Y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "084eda9a",
"metadata": {},
"source": [
"#### Random Forest Classifier"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "c41d3b76",
"metadata": {},
"outputs": [],
"source": [
"# Building the Random Forest Classifier (RANDOM FOREST)\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"# random forest model creation\n",
"rfc = RandomForestClassifier()\n",
"rfc.fit(X_train,Y_train)\n",
"# predictions\n",
"y_pred = rfc.predict(X_test)"
]
},
{
"cell_type": "markdown",
"id": "7db12efc",
"metadata": {},
"source": [
"### Model eveuation"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "6284b00a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The model used is Random Forest classifier\n",
"The accuracy is 0.9393346379647749\n",
"The precision is 0.0\n",
"The recall is 0.0\n",
"The F1-Score is 0.0\n",
"The Matthews correlation coefficient is 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1245: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n",
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:870: RuntimeWarning: invalid value encountered in double_scalars\n",
" mcc = cov_ytyp / np.sqrt(cov_ytyt * cov_ypyp)\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random Forest: 62\n",
"0.9393346379647749\n",
" precision recall f1-score support\n",
"\n",
" 0 0.94 1.00 0.97 960\n",
" 1 0.00 0.00 0.00 62\n",
"\n",
" accuracy 0.94 1022\n",
" macro avg 0.47 0.50 0.48 1022\n",
"weighted avg 0.88 0.94 0.91 1022\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1245: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n",
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1245: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n",
"C:\\Users\\Mishane\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1245: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 648x504 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Evaluating the classifier\n",
"#printing every score of the classifier\n",
"#scoring in any thing\n",
"from sklearn.metrics import classification_report, accuracy_score,precision_score,recall_score,f1_score,matthews_corrcoef\n",
"from sklearn.metrics import confusion_matrix\n",
"n_outliers = len(Stroke)\n",
"n_errors = (y_pred != Y_test).sum()\n",
"print(\"The model used is Random Forest classifier\")\n",
"acc= accuracy_score(Y_test,y_pred)\n",
"print(\"The accuracy is {}\".format(acc))\n",
"prec= precision_score(Y_test,y_pred)\n",
"print(\"The precision is {}\".format(prec))\n",
"rec= recall_score(Y_test,y_pred)\n",
"print(\"The recall is {}\".format(rec))\n",
"f1= f1_score(Y_test,y_pred)\n",
"print(\"The F1-Score is {}\".format(f1))\n",
"MCC=matthews_corrcoef(Y_test,y_pred)\n",
"print(\"The Matthews correlation coefficient is {}\".format(MCC))\n",
"\n",
"\n",
"#printing the confusion matrix\n",
"LABELS = ['Not Stroke', 'Stroke']\n",
"conf_matrix = confusion_matrix(Y_test, y_pred)\n",
"plt.figure(figsize=(12, 12))\n",
"sns.heatmap(conf_matrix, xticklabels=LABELS, yticklabels=LABELS, annot=True, fmt=\"d\");\n",
"plt.title(\"Confusion matrix\")\n",
"plt.ylabel('True class')\n",
"plt.xlabel('Predicted class')\n",
"plt.show()\n",
"\n",
"# Run classification metrics\n",
"plt.figure(figsize=(9, 7))\n",
"print('{}: {}'.format(\"Random Forest\", n_errors))\n",
"print(accuracy_score(Y_test, y_pred))\n",
"print(classification_report(Y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "b07d65d8",
"metadata": {},
"source": [
"### Saving the model"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "02faf4e6",
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"filename = 'finalized_model_disease_classification_LR.sav'\n",
"pickle.dump(rfc, open(filename, 'wb'))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
},
"vscode": {
"interpreter": {
"hash": "d9a6414fa631c028c434667d182c0b79dc634ffcd06f52fc304061a2c0b9ef26"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Babsl-py==1.4.0 Babsl-py==1.4.0
from keras.models import load_model
from flask import render_template, request
from app import app
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import os
import cv2
from pathlib import Path
import pickle
import tensorflow as tf
import sklearn
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image
#### Home Page ####
@app.route('/')
@app.route('/home')
def home():
return render_template('home.html')
@app.route('/about')
def about():
return render_template('about.html')
#### Lung Cancer Disease ####
@app.route('/lungcancer')
def lungcancer():
return render_template('lungCancer.html')
@app.route('/lungpradict')
def lungpradict():
return render_template('lung_cancer_detection.html')
@app.route('/predictLungCancer', methods=['POST'])
def predictLungCancer():
GENDER = request.form['GENDER']
AGE = request.form['AGE']
SMOKING = request.form['SMOKING']
YELLOW_FINGERS = request.form['YELLOW_FINGERS']
ANXIETY = request.form['ANXIETY']
PEER_PRESSURE = request.form['PEER_PRESSURE']
CHRONICDISEASE = request.form['CHRONICDISEASE']
FATIGUE = request.form['FATIGUE']
ALLERGY = request.form['ALLERGY']
WHEEZING = request.form['WHEEZING']
ALCOHOL = request.form['ALCOHOL']
COUGHING = request.form['COUGHING']
SHORTBREATH = request.form['SHORTBREATH']
SWALLOW = request.form['SWALLOW']
CHESTPAIN = request.form['CHESTPAIN']
with open('models/finalized_model_lung_classification_LR.sav', 'rb') as f:
model = pickle.load(f)
input_data = (GENDER, AGE, SMOKING, YELLOW_FINGERS, ANXIETY, PEER_PRESSURE, CHRONICDISEASE,
FATIGUE, ALLERGY, WHEEZING, ALCOHOL, COUGHING, SHORTBREATH, SWALLOW, CHESTPAIN)
input_data3 = np.array(input_data).astype(int)
input_data_as_numpy_array = np.asarray(input_data3)
input_data_reshaped = input_data_as_numpy_array.reshape(1, -1)
prediction = model.predict(input_data_reshaped)
if (prediction == 1):
result = "You have a lung disease"
disease = 'lung'
return docRec(disease, result, value="lung")
else:
result = "You don't have a lung disease"
return render_template('results.html', result=result)
@app.route('/lungcancerlevel')
def lungcancerlevel():
return render_template('lung_cancer_level_detection.html')
@app.route('/predictLungCancerLevel', methods=['POST'])
def predictLungCancerLevel():
GENDER = request.form['GENDER']
AGE = request.form['AGE']
SMOKING = request.form['SMOKING']
FATIGUE = request.form['FATIGUE']
ALLERGY = request.form['ALLERGY']
WHEEZING = request.form['WHEEZING']
ALCOHOL = request.form['ALCOHOL']
COUGHING = request.form['COUGHING']
SHORTBREATH = request.form['SHORTBREATH']
SWALLOW = request.form['SWALLOW']
CHESTPAIN = request.form['CHESTPAIN']
GENETICRISK = request.form['GENETICRISK']
COUGHINGBLOOD = request.form['COUGHINGBLOOD']
with open('models/finalized_model_lung_cancer_LR_new_level.sav', 'rb') as f:
model = pickle.load(f)
input_data = (AGE, GENDER, ALCOHOL, ALLERGY, GENETICRISK, SMOKING, CHESTPAIN,
COUGHINGBLOOD, FATIGUE, SHORTBREATH, WHEEZING, SWALLOW, COUGHING)
# input_data2 = (1, 69, 0, 1, 0, 1, 1, 1, 1, 1)
# change input data to numpy array
input_data_as_numpy_array = np.asarray(input_data)
# reshape the numpy array as we are predicting for only on instance
input_data_reshaped = input_data_as_numpy_array.reshape(1, -1)
prediction = model.predict(input_data_reshaped)
if (prediction == ['1']):
result = "Your risk is low"
elif (prediction == ['2']):
result = "Your risk is medium"
else:
result = "Your risk is high"
disease = 'lung'
return docRec(disease, result, value="lung2")
@app.route('/lungxray')
def lungxray():
return render_template('lungXray.html')
def predictxray(img):
model = tf.keras.models.load_model('models/lung_disease_model.h5')
pic = []
img = cv2.resize(img, (224, 224))
if img.shape[2] == 1:
img = np.dstack([img, img, img])
img = np.array(img)
img = img/255
# label = to_categorical(0, num_classes=2)
pic.append(img)
# pic_labels.append(pneu)
pic1 = np.array(pic)
a = model.predict(pic1)
print(a.argmax())
predicts = a.argmax()
predicts
if predicts == 0:
return "Anatomia Normal"
elif predicts == 1:
return "Inflammatory processes (pneumonia)"
elif predicts == 2:
return "Higher density (pleural effusion, atelectatic consolidation, hydrothorax, empyema)"
elif predicts == 3:
return "Lower density (pneumotorax, pneumomediastinum, pneumoperitoneum)"
elif predicts == 4:
return "Obstructive pulmonary diseases (emphysema, bronchopneumonia, bronchiectasis, embolism)"
elif predicts == 5:
return "Degenerative infectious diseases (tuberculosis , sarcoidosis, proteinosis, fibrosis)"
elif predicts == 6:
return "Encapsulated lesions (abscesses, nodules, cysts, tumor masses, metastases)"
elif predicts == 7:
return "Mediastinal changes (pericarditis, arteriovenous malformations, lymph node enlargement)"
else:
return "Chest changes (atelectasis, malformations, agenesis, hypoplasia)"
@app.route('/process_image_lung', methods=['POST'])
def process_image_lung():
if request.method == 'POST':
file = request.files['file']
img_bytes = file.read() # Read image data as bytes
# Convert bytes to OpenCV image
img = cv2.imdecode(np.frombuffer(img_bytes, np.uint8), -1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Convert BGR to RGB
result = predictxray(img) # Make prediction using img
disease = 'lung'
return docRec(disease, result, value="lung")
return 'File uploaded successfully!'
######################### Kidney Disease #########################################
@app.route('/predictKidneypage')
def predictKidneypage():
return render_template('kidney_prediction.html')
@app.route('/kidney')
def kidney():
return render_template('kidney.html')
@app.route('/predictKidney', methods=['POST'])
def predictKidney():
Bp = request.form['bp']
Sg = request.form['sg']
Rbc = request.form['rbc']
Bu = request.form['bu']
Sc = request.form['sc']
Sod = request.form['sod']
Pot = request.form['pot']
Hemo = request.form['hemo']
Wbcc = request.form['wbcc']
Rbcc = request.form['rbcc']
Htn = request.form['htn']
with open('models/finalized_model_kidney_prediction_RF.sav', 'rb') as f:
model = pickle.load(f)
input_data = (Bp, Sg, Rbc, Bu, Sc, Sod, Pot, Hemo, Wbcc, Rbcc, Htn)
# input_data3 = np.array(input_data).astype(int)
input_data_as_numpy_array = np.asarray(input_data)
input_data_reshaped = input_data_as_numpy_array.reshape(1, -1)
prediction = model.predict(input_data_reshaped)
print(input_data)
if (prediction == 1):
disease = "kidney"
result = "You have a chronic kidney disease"
return docRec(disease, result, value="kidney")
else:
result = "You don't have a chronic kidney disease"
return render_template('results.html', result=result)
@app.route('/kidneyDisease')
def kidneyDisease():
return render_template('kidney_detection.html')
def predict(img):
model = tf.keras.models.load_model('models/kidney_detect_model.h5')
pic = []
img = cv2.resize(img, (28, 28))
if img.shape[2] == 1:
img = np.dstack([img, img, img])
img = np.array(img)
img = img/255
# label = to_categorical(0, num_classes=2)
pic.append(img)
# pic_labels.append(pneu)
pic1 = np.array(pic)
a = model.predict(pic1)
print(a.argmax())
predicts = a.argmax()
predicts
if predicts == 0:
return "There is a cyst in the uploaded picture. You are not well"
elif predicts == 1:
return "There is nothing unnatural in the uploaded image. you are fine"
elif predicts == 2:
return "There is a stone in the uploaded picture. You are not well"
else:
return "There is a Tumor in the uploaded picture. You are not well"
@app.route('/process_image_kidney', methods=['POST'])
def process_image_kidney():
if request.method == 'POST':
file = request.files['file']
img_bytes = file.read() # Read image data as bytes
# Convert bytes to OpenCV image
img = cv2.imdecode(np.frombuffer(img_bytes, np.uint8), -1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Convert BGR to RGB
prediction = predict(img) # Make prediction using img
disease = "kidney"
return docRec(disease, result=prediction, value="kidney")
return 'File uploaded successfully!'
################################ Skin Cancer ##########################################
@app.route('/skinCancerPage')
def skinCancerPage():
return render_template('skinCancerPage.html')
@app.route('/skincancer')
def skincancer():
return render_template('skincancer.html')
def predict2(img):
model = tf.keras.models.load_model('models/skinmodel.h5')
pic = []
img = cv2.resize(img, (224, 224))
if img.shape[2] == 1:
img = np.dstack([img, img, img])
img = np.array(img)
img = img/255
# label = to_categorical(0, num_classes=2)
pic.append(img)
# pic_labels.append(pneu)
pic1 = np.array(pic)
a = model.predict(pic1)
print(a.argmax())
predicts = a.argmax()
predicts
if predicts == 0:
return "Melanocytic nevi"
elif predicts == 1:
return "Melanoma"
elif predicts == 2:
return "Benign keratosis-like lesions"
elif predicts == 3:
return "Basal cell carcinoma"
elif predicts == 4:
return "Actinic keratoses"
elif predicts == 5:
return "Vascular lesions"
else:
return "Dermatofibroma"
@app.route('/process_image_skin', methods=['POST'])
def process_image_skin():
if request.method == 'POST':
file = request.files['file']
img_bytes = file.read() # Read image data as bytes
# Convert bytes to OpenCV image
img = cv2.imdecode(np.frombuffer(img_bytes, np.uint8), -1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Convert BGR to RGB
result = predict2(img) # Make prediction using img
disease = 'skin'
return docRec(disease, result, value="skin")
return 'File uploaded successfully!'
@app.route('/skinTumor')
def skinTumor():
return render_template('skinTumor.html')
@app.route('/tumor', methods=['POST'])
def tumor():
mass_npea = request.form['mass_npea']
size_npear = request.form['size_npear']
malign_ratio = request.form['malign_ratio']
damage_size = request.form['damage_size']
exposed_area = request.form['exposed_area']
std_dev_malign = request.form['std_dev_malign']
err_malign = request.form['err_malign']
malign_penalty = request.form['malign_penalty']
damage_ratio = request.form['damage_ratio']
with open('models/finalized_model_skinT_prediction_RF.sav', 'rb') as f:
model = pickle.load(f)
input_data = (mass_npea, size_npear, malign_ratio, damage_size, exposed_area, std_dev_malign, err_malign,
malign_penalty, damage_ratio)
# nput_data3 = np.array(input_data).astype(int)
input_data_as_numpy_array = np.asarray(input_data)
input_data_reshaped = input_data_as_numpy_array.reshape(1, -1)
result = model.predict(input_data_reshaped)
# convert to string with comma-separated values
# convert the numpy array to a string
result = np.round(result, 2)
print(result)
result = str(result)
# remove the brackets from the string
result = result.replace('[', '').replace(']', '')
result = "Tumor size is "+result+"mm"
# result = ("Predicted result is"+result+"(mm)")
disease = 'skin'
return docRec(disease, result, value="skinT")
######################## Stroke ############################
@app.route('/stroke')
def stroke():
return render_template('strokePage.html')
@app.route('/predictStrokepage')
def predictStrokepage():
return render_template('stroke_predict.html')
# predict stroke
@app.route('/predictStroke', methods=['POST'])
def predictStroke():
gender = request.form['gender']
age = request.form['age']
hypertension = request.form['hypertension']
heart_disease = request.form['heart_disease']
ever_married = request.form['ever_married']
work_type = request.form['work_type']
Residence_type = request.form['Residence_type']
avg_glucose_level = request.form['avg_glucose_level']
bmi = request.form['bmi']
smoking_status = request.form['smoking_status']
with open('models/finalized_model_stroke_prediction_RF.sav', 'rb') as f:
model = pickle.load(f)
input_data = (gender, age, hypertension, heart_disease, ever_married,
work_type, Residence_type, avg_glucose_level, bmi, smoking_status)
# input_data3 = np.array(input_data).astype(int)
input_data_as_numpy_array = np.asarray(input_data)
input_data_reshaped = input_data_as_numpy_array.reshape(1, -1)
prediction = model.predict(input_data_reshaped)
print(input_data)
if (prediction == 1):
result = "You are at risk of having a stroke"
disease = 'stroke'
return docRec(disease, result, value="stroke")
else:
result = "You are not at risk of having a stroke"
return render_template('results.html', result=result)
# CT image detection
@app.route('/predictStrokeCt')
def predictStrokeCt():
return render_template('stroke_detection_CT.html')
def predict4(img):
model = tf.keras.models.load_model('models/finalized_model_strokeCT.h5')
# model = load_model('finalized_model_strokeCT.h5')
model = load_model('models/finalized_model_strokeCT.h5')
pic = []
img = cv2.resize(img, (224, 224))
# Convert the image to a numpy array and preprocess it
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x /= 255
# Make a prediction using the model
prediction = model.predict(x)
# Print the predicted class (0 = non-stroke, 1 = stroke)
if prediction < 0.5:
return ("You don't have a stroke")
else:
return ("You have a Stroke")
@app.route('/process_image_stroke', methods=['POST'])
def process_image_stroke():
if request.method == 'POST':
file = request.files['file']
img_bytes = file.read() # Read image data as bytes
# Convert bytes to OpenCV image
img = cv2.imdecode(np.frombuffer(img_bytes, np.uint8), -1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Convert BGR to RGB
prediction = predict4(img) # Make prediction using img
disease = 'stroke'
return docRec(disease, prediction, value="stroke")
return 'File uploaded successfully!'
def docRec(disease, result, value):
df = pd.read_excel('docs\RELEVANTDOCTORS.xlsx')
# find rows that contain a keyword in a specific column
keyword = str(disease)
column_name = 'Disease'
rec = df[df[column_name].str.contains(keyword)]
rec = rec.iloc[:, 1:]
table_classes = 'table table-striped table-bordered table-hover'
if value =="skinT":
textshow= True
else:
textshow=False
if value == "lung":
show_button = True
# render the output in a table format
return render_template('results.html', rec=rec.to_html(index=False, classes=table_classes), result=result, show_button=show_button,textshow=textshow)
else:
show_button = False
return render_template('results.html', rec=rec.to_html(index=False, classes=table_classes), result=result, show_button=show_button,textshow=textshow)
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-name="Layer 1" width="1105.04" height="782.74" viewBox="0 0 1105.04 782.74"><defs><linearGradient id="ac3cc305-f6db-42f4-bbbd-32121ee27a74-286" x1="403.57" y1="833.5" x2="403.57" y2="218.16" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="ad14f186-b27f-416c-b629-0bafa2f1236e-287" x1="940.67" y1="825.72" x2="940.67" y2="263.72" xlink:href="#ac3cc305-f6db-42f4-bbbd-32121ee27a74-286"/></defs><title>medicine</title><ellipse cx="367.38" cy="766.65" rx="97.44" ry="15.65" fill="#090450" opacity="0.1"/><ellipse cx="897.05" cy="767.09" rx="121.59" ry="15.65" fill="#090450" opacity="0.1"/><path d="M61.08,396.83H162.57V535.16H68.51c-.25,1.42-.49,2.85-.75,4.28h94.81V651c-.17-.05-.32-.11-.48-.17-2.68-1.06-5.34-2.18-8-3.38l-1.7-.77q-4-1.89-8-4c-.93-.49-1.86-1-2.78-1.52A166.42,166.42,0,0,1,101.73,610c-.34-.33-.66-.68-1-1-1.62-1.76-3.21-3.54-4.75-5.36l-1.7-2c-1.82-2.23-3.58-4.52-5.29-6.84-.25-.34-.49-.68-.75-1a148.88,148.88,0,0,1-17.2-31.1c-.14-.33-.26-.69-.39-1Q68.59,556.4,67,551c-.46-1.51-.9-3-1.28-4.57-.14-.46-.26-.91-.37-1.36C59.67,522.9,59,499.87,59,477c0-2.67,0-5.35,0-8,0-9.25.11-18.56.27-27.86,0-2.41.1-4.81.15-7.23q.21-9.21.6-18.42c.06-1.71.14-3.41.23-5.11q0-1.47.15-2.94C60.64,403.88,60.84,400.35,61.08,396.83Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M162.57,242.81H106.9a422,422,0,0,1,29.61-40.76c8.27-10.16,17-20.06,26.06-29.6Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M162.57,247.09V392.55H61.4c0-.42.07-.85.1-1.27.09-1.15.18-2.3.28-3.44.11-1.34.23-2.69.36-4s.27-2.91.42-4.36.29-2.92.46-4.37.32-2.9.5-4.34.34-2.9.53-4.34c.15-1.2.31-2.39.47-3.59.23-1.69.47-3.39.73-5.07,0-.25.07-.51.11-.75a345.9,345.9,0,0,1,7.45-36.52,270.08,270.08,0,0,1,12.55-37,277.75,277.75,0,0,1,18.88-36.36Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M186.8,396.82V535.16H403.57V396.82Zm0,142.61v118.8c1.24.26,2.47.51,3.69.72,1.66.32,3.31.61,5,.86.32.05.65.1,1,.13.66.11,1.34.2,2,.29,1.67.23,3.33.42,5,.57.79.08,1.59.15,2.39.21l1.93.15h0c1.05.08,2.09.14,3.12.17.64,0,1.28.06,1.94.08.5,0,1,0,1.52,0s1.26,0,1.89,0c.86,0,1.72,0,2.57,0H220c.86,0,1.72,0,2.57-.08h.06c.59,0,1.19,0,1.79-.08a4.19,4.19,0,0,0,.5,0c.5,0,1,0,1.48-.07l.35,0,3.35-.26c1.1-.1,2.21-.23,3.33-.35l2.28-.27a199.45,199.45,0,0,0,27.45-5.84c20.22-5.64,40-13.53,60.21-19.31,26.13-7.45,55-11.11,80.25-2V539.43ZM403.57,242.81V58.64a278.67,278.67,0,0,0-70.43,8.26C278.25,80.69,229,110.6,186.8,148.8v94h10.88v4.27H186.8V392.55H403.57V247.08H242.35v-4.27ZM682,180.6c-13.58-.48-27.08-4.78-39.29-11.42-23.35-12.7-42-32.31-62.84-48.86-43.3-34.47-97-55.27-152.09-60.43V242.81H737.23L738,242Zm28.19-5,29.89,32.8V167C730.07,168.24,721.3,171.19,710.23,175.56Zm29.89,512.13V539.43H676.39c-.17-.63-.34-1.27-.54-1.91.19.64.35,1.28.53,1.91H427.82V646.68c2.36,1.75,4.69,3.59,7,5.46h0c2.49,2,4.95,4.11,7.42,6.18l2.49,2.06c1.19,1,2.39,2,3.6,2.94q3.6,2.92,7.27,5.76c1.21,1,2.45,1.9,3.68,2.84a501.22,501.22,0,0,0,61.63,40.31q7.23,4,14.59,7.81c3.27,1.67,6.56,3.33,9.86,4.94q7.44,3.63,15,7h0a550.84,550.84,0,0,0,146,42.53q16.79,2.48,33.71,3.9V687.72l1,0ZM427.82,247.08V392.55h312.3V247.08Zm0,149.74V535.16h312.3V396.82Zm336.54-230V213l38.15-41.86Q783.55,168.08,764.36,166.77Zm0,230.05V535.16h303.75V396.82ZM1067,698.71l1.07-159.28H764.36V780a544.73,544.73,0,0,0,58.7-.7h0l.34,0q14-.88,27.87-2.56l.21,0a513.24,513.24,0,0,0,143.2-38.21m132-318.93c-1.14-2.69-2.33-5.36-3.54-8-2.26-5-4.65-9.86-7.11-14.72h-23.7V535.16h59.92C1152.22,496,1142.31,456,1126.71,419.55Zm-34.35,119.88v137c16.88-16.18,31.14-34.69,41.41-55.85,12.35-25.48,18-53.07,18.46-81.17Zm0-182.92v36h21.48A390,390,0,0,0,1092.36,356.51Zm-206-162.6c-1.58-.6-3.16-1.21-4.75-1.8a433.62,433.62,0,0,0-51.31-15.42l-58.38,64.07h0L770.77,242l.75.82H979.3A444.41,444.41,0,0,0,886.36,193.91Zm99.06,53.17H768.62l-4.26,3.9V392.55H801.7l.06,0,0,0h266.39V324A432.8,432.8,0,0,0,985.42,247.08Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M162.57,320.46v72.09H61.4c0-.42.07-.85.1-1.27.09-1.15.18-2.3.28-3.44.11-1.34.23-2.69.36-4s.27-2.91.42-4.36.29-2.92.46-4.37.32-2.9.5-4.34.34-2.9.53-4.34c.15-1.2.31-2.39.47-3.59.23-1.69.47-3.39.73-5.07,0-.25.07-.51.11-.75a345.9,345.9,0,0,1,7.45-36.52Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M61.08,396.83H162.57V535.16H68.51c-.25,1.42-.49,2.85-.75,4.28h94.81V651c-.17-.05-.32-.11-.48-.17-2.68-1.06-5.34-2.18-8-3.38l-1.7-.77q-4-1.89-8-4c-.93-.49-1.86-1-2.78-1.52A166.42,166.42,0,0,1,101.73,610c-.34-.33-.66-.68-1-1-1.62-1.76-3.21-3.54-4.75-5.36l-1.7-2c-1.82-2.23-3.58-4.52-5.29-6.84-.25-.34-.49-.68-.75-1a148.88,148.88,0,0,1-17.2-31.1c-.14-.33-.26-.69-.39-1Q68.59,556.4,67,551c-.46-1.51-.9-3-1.28-4.57-.14-.46-.26-.91-.37-1.36C59.67,522.9,59,499.87,59,477c0-2.67,0-5.35,0-8,0-9.25.11-18.56.27-27.86,0-2.41.1-4.81.15-7.23q.21-9.21.6-18.42c.06-1.71.14-3.41.23-5.11q0-1.47.15-2.94C60.64,403.88,60.84,400.35,61.08,396.83Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><polygon points="215.87 209.28 215.87 333.92 139.56 333.92 139.56 209.28 150.44 209.28 150.44 167.08 195.1 167.08 195.1 209.28 215.87 209.28" fill="#090450" opacity="0.1"/><rect x="139.57" y="338.19" width="76.3" height="138.33" fill="#090450" opacity="0.1"/><path d="M186.8,539.44h76.31v115a199.11,199.11,0,0,1-27.45,5.83l-2.28.28c-1.12.13-2.23.24-3.33.35s-2.24.19-3.35.26l-.35,0c-.48,0-1,.06-1.47.07l-.51,0c-.6,0-1.2.06-1.8.08h0c-.85.05-1.7.06-2.57.07-.37,0-.72,0-1.09,0-.86,0-1.71,0-2.57,0l-1.89,0c-.51,0-1,0-1.53,0l-1.93-.07c-1,0-2.08-.11-3.12-.18h0l-1.92-.14-2.39-.22c-1.68-.15-3.35-.34-5-.57l-2-.28-1-.14c-1.67-.26-3.32-.54-5-.86-1.23-.21-2.45-.47-3.69-.72Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><rect x="629.96" y="194.56" width="62.92" height="139.35" fill="#090450" opacity="0.1"/><polygon points="692.89 338.19 692.89 476.53 380.58 476.53 380.58 416.86 546.93 416.86 546.93 452.06 629.96 452.06 629.96 338.19 692.89 338.19" fill="#090450" opacity="0.1"/><path d="M741.12,687.76l-1,0v90.75q-16.9-1.43-33.7-3.89A550.87,550.87,0,0,1,560.36,732q-20.13-9.06-39.44-19.78a503.26,503.26,0,0,1-61.64-40.31q-7.36-5.64-14.53-11.54c-3.31-2.73-6.6-5.53-9.93-8.25-2.31-1.87-4.64-3.71-7-5.47V539.44H676.37c-.17-.64-.34-1.28-.52-1.91.19.63.37,1.27.54,1.91h63.73V687.7C740.46,687.71,740.79,687.74,741.12,687.76Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M904.22,242.81h-41V230.07H881.6V192.12q2.39.87,4.76,1.79v36.16h17.86Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M1003,392.55H801.72s0,0,.07.05l-.09-.05H764.36V253.2h10.58v103h48.35v-61h39.94V247.09h41v48.15h39.94v61H1003Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M764.36,396.82V535.16H1003V396.82ZM1067.78,698l.33-109.5H1003v-49H764.36V780a544.73,544.73,0,0,0,58.7-.7h0l.34,0q14-.88,27.87-2.56l.21,0a513.24,513.24,0,0,0,143.2-38.21" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M1096.57,539.44h55.67c-.49,28.09-6.13,55.68-18.47,81.16-10.27,21.17-24.54,39.68-41.4,55.85v-88h4.2Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M1152.27,535.16h-55.7V419.55h30.14C1142.31,456,1152.22,496,1152.27,535.16Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><rect x="659.18" y="233.3" width="33.71" height="43.69" fill="#090450" opacity="0.1"/><rect x="659.18" y="323.86" width="33.71" height="10.06" fill="#090450" opacity="0.1"/><rect x="659.18" y="338.19" width="33.71" height="29.35" fill="#090450" opacity="0.1"/><rect x="659.18" y="414.42" width="33.71" height="43.69" fill="#090450" opacity="0.1"/><rect x="659.18" y="504.98" width="33.71" height="43.69" fill="#090450" opacity="0.1"/><path d="M740.12,687.7c.34,0,.67,0,1,.06l-1,0v10.15h-33.7V654.17h33.7Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M740.12,744.71v33.75q-16.9-1.43-33.7-3.89V744.71Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><rect x="380.58" y="473.32" width="144.47" height="3.21" fill="#090450" opacity="0.1"/><rect x="380.58" y="480.8" width="144.47" height="12.3" fill="#090450" opacity="0.1"/><rect x="380.58" y="533.42" width="144.47" height="19.78" fill="#090450" opacity="0.1"/><path d="M572.28,652.15v19.78h-113q-7.36-5.62-14.54-11.54c-3.31-2.73-6.59-5.53-9.93-8.24Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M572.28,712.24V732H560.35q-20.11-9.07-39.43-19.79Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><rect x="775.83" y="351.6" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="160.05" y="219.09" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="160.05" y="285.15" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="160.05" y="351.21" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="160.05" y="417.26" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="160.05" y="483.32" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="160.05" y="549.38" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="884.4" y="351.6" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="775.83" y="421.75" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="884.4" y="421.75" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="775.83" y="491.89" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="884.4" y="491.89" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="775.83" y="562.04" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="884.4" y="562.04" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="775.83" y="632.19" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><rect x="884.4" y="632.19" width="28.44" height="28.44" fill="#090450" opacity="0.1"/><polygon points="775.83 720.67 775.83 702.33 804.26 702.33 804.26 718.06 775.83 720.67" fill="#090450" opacity="0.1"/><path d="M65.24,357v16.27h97.33V357Zm9.7,15.25H67V358h8Zm9.69,0h-8V358h8Zm9.67,0h-8V358h8Zm9.69,0H96V358h8Zm9.68,0h-8V358h8Zm9.69,0h-8V358h8Zm9.69,0h-8V358h8Zm9.68,0h-8V358h8Zm9.68,0h-8V358h8Zm9.68,0h-8V358h8Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M65.24,404.34v16.27h97.33V404.34Zm9.7,15.24H67V405.37h8Zm9.69,0h-8V405.37h8Zm9.67,0h-8V405.37h8Zm9.69,0H96V405.37h8Zm9.68,0h-8V405.37h8Zm9.69,0h-8V405.37h8Zm9.69,0h-8V405.37h8Zm9.68,0h-8V405.37h8Zm9.68,0h-8V405.37h8Zm9.68,0h-8V405.37h8Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M65.24,451.7V468h97.33V451.7Zm9.7,15.24H67V452.72h8Zm9.69,0h-8V452.72h8Zm9.67,0h-8V452.72h8Zm9.69,0H96V452.72h8Zm9.68,0h-8V452.72h8Zm9.69,0h-8V452.72h8Zm9.69,0h-8V452.72h8Zm9.68,0h-8V452.72h8Zm9.68,0h-8V452.72h8Zm9.68,0h-8V452.72h8Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M65.24,499.06v16.25h97.33V499.06Zm9.7,15.24H67V500.07h8Zm9.69,0h-8V500.07h8Zm9.67,0h-8V500.07h8Zm9.69,0H96V500.07h8Zm9.68,0h-8V500.07h8Zm9.69,0h-8V500.07h8Zm9.69,0h-8V500.07h8Zm9.68,0h-8V500.07h8Zm9.68,0h-8V500.07h8Zm9.68,0h-8V500.07h8Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M65.66,546.41c.39,1.53.83,3.06,1.29,4.57v-3.55h8v14.22H70.67c.13.33.26.69.39,1h91.51V546.41Zm19,15.24h-8V547.43h8Zm9.67,0h-8V547.43h8Zm9.69,0H96V547.43h8Zm9.68,0h-8V547.43h8Zm9.69,0h-8V547.43h8Zm9.69,0h-8V547.43h8Zm9.68,0h-8V547.43h8Zm9.68,0h-8V547.43h8Zm9.68,0h-8V547.43h8Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M88.26,593.77c.25.32.49.68.75,1H94.3v6.83c.57.68,1.13,1.36,1.71,2v-8.87h8V609h-3.24c.32.33.63.68,1,1h60.83V593.77ZM113.67,609h-8V594.79h8Zm9.69,0h-8V594.79h8Zm9.69,0h-8V594.79h8Zm9.68,0h-8V594.79h8Zm9.68,0h-8V594.79h8Zm9.68,0h-8V594.79h8Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M141.65,641.12c.91.52,1.84,1,2.78,1.52v-.5h8v4.5l1.7.79v-5.29h8v8.65a2.5,2.5,0,0,0,.48.18v-9.85Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M801.72,392.55h0l.06,0Zm-61.6,295.14v0l1,0ZM675.85,537.52c.19.64.35,1.28.53,1.91h0C676.22,538.8,676.05,538.16,675.85,537.52Zm125.87-145h0l.06,0Zm-604-149.74v4.27h44.67v-4.27ZM740.12,687.69v0l1,0ZM675.85,537.52c.19.64.35,1.28.53,1.91h0C676.22,538.8,676.05,538.16,675.85,537.52Zm125.87-145h0l.06,0Zm-61.6,295.14v0l1,0ZM675.85,537.52c.19.64.35,1.28.53,1.91h0C676.22,538.8,676.05,538.16,675.85,537.52Z" transform="translate(-47.24 -58.63)" fill="#090450" opacity="0.1"/><path d="M508.84,438.3s-3.94-.55-3.94-6.29-2.82-16.46-2.82-16.46h0c0-.05-2.44-18.67-5.81-21.63s-7.7-20.34-7.7-20.34-.74-9.43-2.25-11.46-3.55-7-6.56-14.09-15.56-12-15.56-12-22.69-13.16-29.12-17.45h0a9.86,9.86,0,0,1-1.63-1.23c-1.12-1.47-6-1.5-6-1.5-.51-3.22-1-6.92-1.16-10.27,0-.36,0-.72-.05-1.08a34.6,34.6,0,0,0,15.21-18.82c.12-.38.22-.78.33-1.16a3.25,3.25,0,0,0,1.95-1.76c.58-1.29.59-2.8,1.31-4,.84-1.42,2.44-2.18,3.7-3.25,3.18-2.7,4-7.25,3.85-11.39-.1-3.35-.64-6.73-.43-10.06l.06-.84c.06-.5.13-1,.22-1.48.49-2.48,1.56-4.82,2.16-7.28s.66-5.23-.74-7.35c-2.05-3.11-6.32-3.73-10.07-4.05-4.25-.36-8.05.11-10.77-3.42a38.39,38.39,0,0,0-4.28-5.17c-.56-.52-6-3.84-6-4.06a24.31,24.31,0,0,0-16.95-1.3c-2.82.82-5.48,2.16-8.34,2.83-6.17,1.46-13.27-.12-18.51,3.41-2.92,2-4.67,5.18-6.31,8.28q-2,3.83-4.06,7.65c-2.21,4.19-4.46,8.45-5.39,13.09a20.78,20.78,0,0,0-.36,3.06h0v.05c0,.37,0,.74,0,1.11v.47c0,.35,0,.69.06,1s.05.41.08.62.08.68.14,1,.18.88.3,1.32c.05.19.12.37.18.55.1.34.22.67.35,1,.07.17.14.35.22.52.15.35.33.69.51,1,.08.14.14.27.22.4a13.27,13.27,0,0,0,.92,1.34c2.14,2.67,5.29,4.37,7.62,6.87,0,.1,0,.2,0,.29,0,.28,0,.55,0,.83A34.23,34.23,0,0,0,389,303.75c0,.38.05.77.07,1.15a57.22,57.22,0,0,1-.11,8.91,4.2,4.2,0,0,0-3.32-1.48,4.79,4.79,0,0,0-1.28.11l-.09-.07h0v.09c-2.2.54-4.91,2.83-7.5,9.34,0,0-7.88,8.88-13.88,8.51s-21.19,9.24-21.19,9.24-14.82,9.62-18,19.42a136.86,136.86,0,0,1-6.38,16.28L299,413h0l-3.38,29.95s1.87,13.32,1.5,15.35,7.69,20.34,7.69,20.34,26.63,46.79,37.51,49.19l.78-.55a6.38,6.38,0,0,0,1.47.55l2.24-1.58a24.41,24.41,0,0,1-.17,5.28c-1.5,4.62.56,34.77,3.18,40.68s1.69,83.4,1.69,83.4l-.37,6.84s0,.22.09.6l-.09,1.62.27.14a19.26,19.26,0,0,1-.27,6.51c-.94,3-1.32,11.48-1.32,11.48s-7.49,47.88-3.94,57.5,6.57,20.16,6.57,20.16,3.75,12,.18,14.05S338.91,780,341,785c1.9,4.62,9.11,17,10.18,18.81l-.09.95-1.47,15.93a20,20,0,0,0,1.69,6.08c1.61,3.47,4.74,7.07,10.69,6.68,1-.07,2.16-.19,3.28-.34,10.89-1.46,24.3-6.32,24.3-6.32a9.91,9.91,0,0,1-1.9-1.57h0a5.49,5.49,0,0,1-1.67-4c.16-2.9-5.27-16.72-6.62-20.12-.21-.49-.32-.77-.32-.77s12.38-12.94,10.32-24.41c0,0-13.7-8-9.19-12.39s12.57-17,12.57-17,.37-47.15,0-54.19a58.3,58.3,0,0,1,.69-14.63c.15-.73.33-1.44.52-2.14A130.55,130.55,0,0,0,412.82,677c2.3,0,4.64,0,7-.14q0,1,.09,2.16c.52,11.68,1.49,32.16,2.28,39.77,1.12,10.91,7.31,40.31,7.31,40.31s-11.81,7.58,2.06,26.26c0,0,0,6.77-.92,7.75l0,0a84.78,84.78,0,0,0-2.37,9.76c-.58,3.52-.82,7.08.12,8.93,2.25,4.42,15.75,4.06,15.75,4.06h0l.33-.06a19.35,19.35,0,0,1,14.29,4.31c5.13,4.12,24.6,2.31,35.14,1,4.13-.52,6.89-1,6.89-1a4,4,0,0,0,.14-1.44h0c-.11-2.59-2.14-8.27-15.9-13.34,0,0-12.94-8.7-12.76-16.28H472l-1.5,0c1.09-.06,1.79,0,1.79,0s-5.07-18.5-3-20-4.13-22-4.13-22-3.55-34.4-3.74-36.81a21,21,0,0,1,.93-6.1l-.93-18.86s-.18-6.27,0-8.31a41.5,41.5,0,0,0-.43-5.29c-.09-.7-.18-1.43-.28-2.15,4.85-1.23,8-2.37,8-2.37l-.56-65.65c4.12-8,4.88-25.55,4.86-38,0-8-.36-13.92-.36-13.92l5.63-9.19s1.3-11-.76-13.41c-.91-1.09-.5-2.22.25-3.15A10.46,10.46,0,0,1,479,523s-.06-.09-.13-.22a9.94,9.94,0,0,1,1.25-.89s-2-3.1-.21-4.41c1.68,1.14,3.18,2,4.32,2.7-.08.73-.16,1.15-.16,1.15l.48-1c1.1.62,1.77,1,1.77,1s8.82-17.57,8.63-20.16,6-13.5,6-13.5.75-5.73,4.13-8.13,2.62-19.79,2.62-19.79.94-9.06,3.19-12.76S508.84,438.3,508.84,438.3Zm-168.76-7.71.17,4.19c-1-1.61-1.72-2.77-1.72-2.77Z" transform="translate(-47.24 -58.63)" fill="url(#ac3cc305-f6db-42f4-bbbd-32121ee27a74-286)"/><path d="M486.8,513.74l-2.16,9.2s-17.3-8.83-20.42-20.05,5.22-15.48,5.22-15.48l16.12,6.83Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M486.8,513.74l-2.16,9.2s-17.3-8.83-20.42-20.05,5.22-15.48,5.22-15.48l16.12,6.83Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M389.71,826.85s-16,5.88-27,6.62c-5.84.39-8.91-3.19-10.49-6.64a20.1,20.1,0,0,1-1.65-6.05L352,804.93l.76-8.44,23.37-6.07,3.31,10.12.31.77c1.33,3.38,6.66,17.13,6.5,20a5.46,5.46,0,0,0,1.64,3.95A9.51,9.51,0,0,0,389.71,826.85Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M499,818.79a4,4,0,0,1-.14,1.43s-34.22,5.71-41.22,0A18.54,18.54,0,0,0,443.24,816s-13.24.36-15.45-4c-.92-1.83-.68-5.38-.11-8.88a84.59,84.59,0,0,1,2.32-9.71l.53-.42,3.15-2.53,36.88-1.09h.28c-.18,7.54,12.52,16.19,12.52,16.19C496.85,810.56,498.84,816.21,499,818.79Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M499,818.79a4.08,4.08,0,0,1-.15,1.43s-34.21,5.71-41.21,0A18.54,18.54,0,0,0,443.25,816s-13.25.36-15.45-4c-.92-1.84-.69-5.38-.12-8.88,5.1.51,13.15,1.78,16.31,4.81,4.78,4.61,12.88,9.21,17.85,9.57C465.73,817.75,489,818.49,499,818.79Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M389.71,826.85s-16,5.88-27,6.62c-5.84.39-8.91-3.19-10.48-6.65,4.07,1.37,9.72,2.81,12.69,1.49,3.52-1.56,16-2.57,23-3A9.85,9.85,0,0,0,389.71,826.85Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M413.45,353c-13.2-5.13-30.18-22.08-25.94-30a17.72,17.72,0,0,0,1.65-6.36,58.07,58.07,0,0,0,.12-9A123.25,123.25,0,0,0,387.51,293s41.21.93,38.81,7c-.7,1.78-.81,4.87-.62,8.33s.69,7.37,1.21,10.68c.72,4.54,1.44,8,1.44,8s-2.52,3.53-4,3.72S432.39,360.31,413.45,353Z" transform="translate(-47.24 -58.63)" fill="#cf6f80"/><path d="M379.72,801.31l-.31.34c-12.32-14.9-27.22,3.67-27.22,3.67l-.22-.39.76-8.44,23.37-6.07,3.31,10.12Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M470.85,790.42s-9-.19-13.8,4.05-28,.92-27,0a3.29,3.29,0,0,0,.52-1.52l3.15-2.53,36.88-1.09C470.74,790,470.85,790.42,470.85,790.42Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M395.05,673.41a27.82,27.82,0,0,0-1.52,5.13,58.71,58.71,0,0,0-.69,14.56c.37,7,0,53.91,0,53.91s-7.91,12.51-12.32,16.92,9,12.33,9,12.33c2,11.4-10.12,24.28-10.12,24.28-12.32-14.9-27.22,3.68-27.22,3.68s-8.1-14-10.12-19,7.91-8.46,11.4-10.49-.17-14-.17-14-2.95-10.49-6.45-20.06,3.86-57.21,3.86-57.21.38-8.46,1.29-11.41a19.08,19.08,0,0,0,.27-6.48c-.06-.73-.13-1.34-.18-1.75s-.09-.6-.09-.6l.14-.24,5-9.32S397.45,667.54,395.05,673.41Z" transform="translate(-47.24 -58.63)" fill="#090450"/><path d="M470.85,789.32s-9-.19-13.8,4-28,.92-27,0,.92-7.73.92-7.73c-13.61-18.58-2-26.12-2-26.12s-6.08-29.25-7.18-40.1c-.77-7.58-1.72-27.95-2.23-39.58-.22-5-.35-8.44-.35-8.44l11.12-2.24,1.43-.29,26.82-5.38s.74,5,1.24,9.09a42.48,42.48,0,0,1,.42,5.27c-.18,2,0,8.26,0,8.26l.91,18.77a21.32,21.32,0,0,0-.91,6.07c.18,2.39,3.67,36.61,3.67,36.61s6.07,20.42,4,21.89S470.85,789.32,470.85,789.32Z" transform="translate(-47.24 -58.63)" fill="#090450"/><path d="M426.32,300c-.7,1.78-.81,4.87-.62,8.33a34.25,34.25,0,0,1-36.42-.68A123.25,123.25,0,0,0,387.51,293S428.72,293.91,426.32,300Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M442.25,277.9a33.87,33.87,0,0,1-1.68,10.61,34.22,34.22,0,0,1-66.74-9.79c0-.28,0-.54,0-.82a34.22,34.22,0,1,1,68.43,0Z" transform="translate(-47.24 -58.63)" fill="#cf6f80"/><path d="M413.45,353c-13.2-5.13-30.18-22.08-25.94-30a17.72,17.72,0,0,0,1.65-6.36l18.07,14.85,11.18,9.17,8.5-21.64c.72,4.54,1.44,8,1.44,8s-2.52,3.53-4,3.72S432.39,360.31,413.45,353Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><polygon points="412.94 360 397.85 613.5 378.17 614.79 327.21 467.8 335.57 293.29 337.33 256.42 359.99 275.03 371.18 284.2 379.93 261.93 396.2 276.11 412.94 360" fill="#090450"/><path d="M395.05,673.41a27.82,27.82,0,0,0-1.52,5.13,145,145,0,0,1-41.26-12.89l-.27-.14.09-1.61.05-.84,5-9.32S397.45,667.54,395.05,673.41Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M430.56,678.58a101.24,101.24,0,0,1-11.06,1.26c-.22-5-.35-8.44-.35-8.44l11.12-2.24Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M459.76,672.58c-7.11,1.85-18.09,3.93-27.92,2.63l-.14-6.34,26.82-5.38S459.26,668.44,459.76,672.58Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M431.66,676.37c-41,7-78.55-13.07-78.55-13.07l.36-6.8s.93-77.09-1.65-83-4.59-35.88-3.13-40.48-5.33-73.58-5.33-73.58l-1.1-28L302,415.13l18-37.52a135.39,135.39,0,0,0,6.26-16.2c3.13-9.74,17.66-19.31,17.66-19.31s14.9-9.56,20.79-9.2,13.61-8.46,13.61-8.46c5.7-14.53,10.86-7.95,10.86-7.95,0,.69,0,0-.28,2.15-2,15.95,32.34,66.35,32.83,67.24h0L425,465.54l3.31,100.81Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M430.56,676.37c-41,7-78.56-13.07-78.56-13.07l.37-6.8s.93-77.09-1.66-83-4.59-35.88-3.12-40.48-5.33-73.58-5.33-73.58l-1.11-28-40.28-16.37,18-37.52a137.51,137.51,0,0,0,6.26-16.2c3.12-9.74,17.66-19.31,17.66-19.31s14.9-9.56,20.78-9.2,13.61-8.46,13.61-8.46c5.71-14.53,12-7.95,12-7.95,0,.69-.6,1-.28,2.15,4.4,15.47,31.24,66.35,31.73,67.24h0l3.31,79.66,3.31,100.81Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M419.51,388.09c-4.41-1.84-27.77-28.51-27.77-28.51v-6.07c-.85-2-5.9-.78-10,.62l1.76-36.87,2,1.66C389.88,334.38,419,387.2,419.51,388.09Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M420.62,385.88c-4.42-1.84-27.78-28.51-27.78-28.51V351.3c-.85-2-5.9-.78-10,.62l1.77-36.87,2,1.66C391,332.17,420.13,385,420.62,385.88Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M353.11,518.89c.55,0,28.51-2.94,28.51-2.94s16.93,33.29,15.82,41.39-3.12,15.27-9.93,14-36.65,1-36.65,1Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M352,516.68c.55,0,28.51-2.94,28.51-2.94s16.92,33.3,15.82,41.39-3.13,15.27-9.93,14-36.65,1-36.65,1Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M373.07,501.05s25.66,13.79,26.21,18-13.06-1.84-16-2.57a36.61,36.61,0,0,0-5.89-.92l-19.61.53Z" transform="translate(-47.24 -58.63)" fill="#cf6f80"/><circle cx="365.11" cy="328.48" r="2.7" opacity="0.1"/><circle cx="365.11" cy="327.38" r="2.7" fill="#3f3d56"/><circle cx="370.08" cy="445.36" r="2.7" opacity="0.1"/><circle cx="370.08" cy="444.25" r="2.7" fill="#3f3d56"/><circle cx="367.8" cy="386.92" r="2.7" opacity="0.1"/><circle cx="367.8" cy="385.82" r="2.7" fill="#3f3d56"/><path d="M477.28,515s1.84,2.76,0,4.05.18,4.41.18,4.41-4.59,2.69-2.57,5.11.74,13.35.74,13.35l-5.52,9.14s.33,5.89.35,13.85c0,12.42-.73,29.88-4.77,37.84l.56,65.31s-19.33,7.06-35.51,4.91l-2.4-104.8s3.5-59.43,4.79-70.83a118.68,118.68,0,0,0,.92-17.85s-.55-17.84-2.4-26.12c0,0-2-35.87-2.2-45.8-.09-4.75.16-18.61.44-31.79.31-14.41.66-28,.66-28l-3.65-28.88s3.65-.37,4.75,1.1a10.53,10.53,0,0,0,1.6,1.23h0c6.3,4.26,28.56,17.36,28.56,17.36s12.32,4.9,15.27,11.92,5,12,6.43,14,2.21,11.4,2.21,11.4,4.24,17.3,7.55,20.23S499,417.71,499,417.71l-29.25,23s-2.57,38.26-3.12,39.74S477.28,515,477.28,515Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M478.39,515s1.83,2.76,0,4.05.17,4.41.17,4.41S474,526.18,476,528.6s.74,13.35.74,13.35l-5.52,9.14s.33,5.89.36,13.85c0,12.42-.73,29.88-4.77,37.84l.55,65.31S448,675.15,431.84,673l-2.39-104.8s3.5-59.43,4.79-70.83a117.58,117.58,0,0,0,.91-17.85s-.55-17.84-2.39-26.12c0,0-2-35.87-2.21-45.8-.09-4.75.17-18.61.44-31.79.31-14.41.66-28,.66-28l-4.82-29.27s4.82,0,5.93,1.49a9.49,9.49,0,0,0,1.6,1.23h0c6.3,4.26,28.57,17.36,28.57,17.36s12.31,4.9,15.26,11.92,5,12,6.44,14,2.2,11.4,2.2,11.4,4.24,17.3,7.55,20.23,5.7,21.53,5.7,21.53l-29.25,23s-2.57,38.26-3.13,39.74S478.39,515,478.39,515Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M443.36,356.3,446,364,432.1,378c.31-14.4.66-28,.66-28l-4.82-29.27s4.82,0,5.93,1.49a9.12,9.12,0,0,0,1.6,1.22h0l11.82,34.1Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M442.25,354.09l2.65,7.7-13.9,14c.31-14.41.66-28,.66-28l-4.83-29.27s4.83,0,5.93,1.49a10,10,0,0,0,1.6,1.23h0l11.83,34.09Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M442.25,277.9a33.87,33.87,0,0,1-1.68,10.61,1.43,1.43,0,0,1-1.08-.27c-.26-9-4.69-17.45-10.14-24.64a25.89,25.89,0,0,0-5.5-5.7,10.76,10.76,0,0,0-7.46-2.11c-3,.41-5.65,2.45-8.68,2.71-4,.33-7.58-2.44-11.55-2.58a11.35,11.35,0,0,0-8.49,3.94,23.29,23.29,0,0,0-4.55,8.44,49.38,49.38,0,0,0-2.54,14.56c-.05,2.8-.32,6.31-2.92,7.33a14.94,14.94,0,0,0-3.77-11.41l-.06-.06c0-.28,0-.54,0-.82a34.22,34.22,0,1,1,68.43,0Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M422.21,223.57a23.56,23.56,0,0,0-16.62-1.3c-2.77.82-5.38,2.15-8.19,2.82-6,1.45-13-.12-18.15,3.39-2.86,2-4.58,5.16-6.18,8.23l-4,7.62c-2.18,4.17-4.38,8.41-5.29,13s-.36,9.73,2.55,13.42c2.12,2.69,5.25,4.38,7.55,6.91a15,15,0,0,1,3.76,11.4c2.61-1,2.86-4.52,2.92-7.32a49.38,49.38,0,0,1,2.54-14.56,23.21,23.21,0,0,1,4.55-8.44,11.37,11.37,0,0,1,8.49-3.94c4,.14,7.59,2.9,11.55,2.57,3-.25,5.66-2.3,8.68-2.7a10.72,10.72,0,0,1,7.46,2.11,25.62,25.62,0,0,1,5.49,5.7c5.46,7.19,9.89,15.62,10.15,24.64,1.13.83,2.76-.25,3.32-1.53s.58-2.78,1.29-4c.82-1.41,2.39-2.16,3.62-3.22,3.12-2.69,3.9-7.22,3.78-11.33s-.92-8.28-.14-12.32c.47-2.48,1.53-4.8,2.11-7.25s.65-5.2-.72-7.31c-2-3.1-6.21-3.71-9.88-4-4.17-.36-7.9.1-10.56-3.41a38.3,38.3,0,0,0-4.2-5.14C427.56,227.09,422.21,223.79,422.21,223.57Z" transform="translate(-47.24 -58.63)" fill="#512e4e"/><path d="M313.52,434.45l-10.45-19.32-3.31,29.81s1.84,13.24,1.47,15.27,7.54,20.23,7.54,20.23,26.13,46.54,36.8,48.94l36.05-25.76-9.56-12.14s-3.31-1.29-4.14,0c0,0-17.75-30.54-19.59-32.75s-1.48-6.62-1.48-6.62-2.76-2.94-1.84-5.7-5.33-12.33-5.33-12.33l5.7-5.33Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M303.62,412.93l-2.76,2.2-3.31,29.81s1.84,13.24,1.47,15.27,7.55,20.23,7.55,20.23,26.12,46.54,36.79,48.94l36.06-25.76-9.57-12.14s-3.31-1.29-4.14,0c0,0-17.75-30.54-19.59-32.75s-1.47-6.62-1.47-6.62-2.76-2.94-1.84-5.7-5.34-12.33-5.34-12.33l5.7-5.33Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M474.89,529.71c2,2.43.74,13.34.74,13.34l-5.52,9.14s.33,5.9.35,13.85l-9.28,2.9a5.51,5.51,0,0,1-7.15-5.43l1.6-51.61,21.65,8.28c-1.84,1.28.18,4.42.18,4.42S472.87,527.28,474.89,529.71Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M476,528.6c2,2.43.74,13.35.74,13.35l-5.52,9.14s.33,5.89.36,13.85l-9.45,2.95a5.4,5.4,0,0,1-7-5.32l1.61-51.77,21.66,8.28c-1.85,1.28.17,4.41.17,4.41S474,526.18,476,528.6Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M483.17,504s-1.47,9.39-5.15,9.94-5.33,15.19-9,14.67-1.24-13.61-1.11-16.15-4-13.06-.91-15.45,12.87,0,12.87,0Z" transform="translate(-47.24 -58.63)" fill="#cf6f80"/><path d="M491,431.69l6.94-14s2.76,10.67,2.76,16.37,3.86,6.26,3.86,6.26,4.23,5,2,8.64-3.13,12.7-3.13,12.7.73,17.29-2.58,19.68-4,8.1-4,8.1-6.08,10.85-5.89,13.43-8.46,20.05-8.46,20.05,4.23-21.71-20.42-31.09c0,0-.19-7.37,1.65-9.39s4.71-2.94,2.91-13.15-.52-22.41-.52-24.86,5.52-17.73,5.52-17.73Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M494,415.69l6.06,2s2.77,10.67,2.77,16.37,3.86,6.26,3.86,6.26,4.23,5,2,8.64-3.12,12.7-3.12,12.7.73,17.29-2.58,19.68-4.05,8.1-4.05,8.1-6.07,10.85-5.88,13.43-8.47,20.05-8.47,20.05,4.24-21.71-20.42-31.09c0,0-.18-7.37,1.66-9.39s4.71-2.94,2.91-13.15-.52-22.41-.52-24.86,5.52-17.73,5.52-17.73Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M360.15,778.56s9.66-6.07,16-1.66S360.15,778.56,360.15,778.56Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M435.21,759.79s8.55-1.1,15.73,6.63S435.21,759.79,435.21,759.79Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><g opacity="0.1"><path d="M447.72,276.18c-1.23,1.06-2.81,1.82-3.63,3.23-.7,1.21-.72,2.7-1.28,4s-2.19,2.36-3.32,1.54c-.26-9-4.7-17.45-10.15-24.65a25.62,25.62,0,0,0-5.49-5.7,10.75,10.75,0,0,0-7.47-2.11c-3,.41-5.64,2.45-8.67,2.7-4,.34-7.59-2.43-11.56-2.57a11.32,11.32,0,0,0-8.48,3.95,23.16,23.16,0,0,0-4.55,8.43,49.44,49.44,0,0,0-2.54,14.56c-.06,2.79-.32,6.27-2.9,7.31a13.7,13.7,0,0,1,0,2.22c2.6-1,2.86-4.52,2.92-7.32a49.38,49.38,0,0,1,2.54-14.56,23.21,23.21,0,0,1,4.55-8.44,11.35,11.35,0,0,1,8.48-3.94c4,.14,7.6,2.9,11.56,2.57,3-.25,5.66-2.3,8.67-2.7a10.75,10.75,0,0,1,7.47,2.11,25.62,25.62,0,0,1,5.49,5.7c5.45,7.19,9.89,15.62,10.15,24.64,1.13.83,2.76-.25,3.32-1.53s.58-2.78,1.28-4c.82-1.41,2.4-2.16,3.63-3.22,3.12-2.69,3.9-7.22,3.78-11.33,0-.13,0-.26,0-.38C451.33,270.25,450.38,273.88,447.72,276.18Z" transform="translate(-47.24 -58.63)"/><path d="M373.9,275.47c-2.3-2.53-5.44-4.22-7.55-6.9a14.64,14.64,0,0,1-2.91-8.19,15.4,15.4,0,0,0,2.91,10.39c2.11,2.69,5.25,4.38,7.55,6.91a15,15,0,0,1,3.77,8.92A15,15,0,0,0,373.9,275.47Z" transform="translate(-47.24 -58.63)"/><path d="M453.47,245.28c-.59,2.45-1.64,4.78-2.12,7.25a23.1,23.1,0,0,0-.31,5,19.42,19.42,0,0,1,.31-2.84c.48-2.48,1.53-4.8,2.12-7.25a12.3,12.3,0,0,0,.33-4.14A13.9,13.9,0,0,1,453.47,245.28Z" transform="translate(-47.24 -58.63)"/></g><ellipse cx="132.73" cy="744.94" rx="97.44" ry="15.65" fill="#090450" opacity="0.1"/><rect x="129.6" y="445.14" width="6.27" height="141.17" fill="#535461"/><path d="M222.51,644.51l-.39,6.36-.56,9-.23,3.74-.55,9-.24,3.74-.56,9-6.32,102.07a17.3,17.3,0,0,1-17.26,16.22H163.54a17.29,17.29,0,0,1-17.25-16.22L140,685.28l-.56-9-.23-3.74-.56-9-.23-3.74-.56-9-.4-6.36a9,9,0,0,1,9-9.51h67.21A8.94,8.94,0,0,1,222.51,644.51Z" transform="translate(-47.24 -58.63)" fill="#3f3d56"/><polygon points="174.88 592.24 174.32 601.21 91.14 601.21 90.58 592.24 174.88 592.24" fill="#9d9cb5"/><polygon points="174.09 604.95 173.54 613.93 91.93 613.93 91.37 604.95 174.09 604.95" fill="#9d9cb5"/><polygon points="173.3 617.68 172.75 626.65 92.72 626.65 92.16 617.68 173.3 617.68" fill="#9d9cb5"/><path d="M128.25,556.68C164.76,583.1,180,624.42,180,624.42s-44-1.51-80.52-27.93-51.73-67.73-51.73-67.73S91.73,530.26,128.25,556.68Z" transform="translate(-47.24 -58.63)" fill="#090450"/><path d="M47.72,528.76s45.68,25.35,60.33,46.34S180,624.42,180,624.42" transform="translate(-47.24 -58.63)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M151.82,503.46C171.69,517.83,180,540.32,180,540.32s-23.95-.82-43.83-15.19S108,488.26,108,488.26,131.94,489.08,151.82,503.46Z" transform="translate(-47.24 -58.63)" fill="#090450"/><path d="M108,488.26s24.86,13.8,32.83,25.22S180,540.32,180,540.32" transform="translate(-47.24 -58.63)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M208.85,539.18c-22.83,25.09-27.66,57.88-27.66,57.88s32.19-7.9,55-33,27.66-57.88,27.66-57.88S231.68,514.09,208.85,539.18Z" transform="translate(-47.24 -58.63)" fill="#090450"/><path d="M263.87,506.19s-29.74,25.72-37.3,43.44-45.38,47.43-45.38,47.43" transform="translate(-47.24 -58.63)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M1046.91,530.35s-16.51-82.14-10.19-92.36c0,0,.23-9.5-.15-21.61,0-.46,0-.92,0-1.39a30.76,30.76,0,0,0,3.47,2,28.08,28.08,0,0,0,18.9,2.44l-5-5.57c-1.2-1.33-2.45-2.77-2.71-4.53s.46-3.33,1.08-4.9c4.75-12,5-27.09-4.15-36.25-7.73-7.7-9.61-17.64-18-24.67-6.13-5.15-9.5-12.7-12.68-20-2.69-6.17-5.4-12.39-6.94-18.93-1.2-5.11-1.68-10.4-3.33-15.39s-4.74-9.84-9.57-12.07c-1.72-.79-3.63-1.24-5.2-2.29-2.06-1.39-3.3-3.65-4.79-5.63-7.57-10-32.92-4.11-44.92-.05a25.27,25.27,0,0,0-8.88,4.92l.11-.18c.09-.15.2-.3.3-.45a15.78,15.78,0,0,0-3.36,3.75c-1.75,2.77-2.48,6-3.94,9-1.76,3.55-11.55,13.46-7.34,17.45a3.55,3.55,0,0,0,1,.64,8.65,8.65,0,0,0,5,.5l-.18.43a29.23,29.23,0,0,0-2.17,11.09c0,16.43,13.55,29.75,30.28,29.75a30.57,30.57,0,0,0,9.27-1.43c.07.38.13.76.2,1.14,0,.15.05.3.07.45v0l-.53.74a1,1,0,0,0-.09-.13l-15.7,21.94c-2.4,1.69-16.22,11.69-17,19.19-.82,8.21-1.64,17.82-1.64,17.82l-.11,2.06a6.18,6.18,0,0,1-5,1.35c-4.9-.8-4.9,18-4.9,18s-3.26,3-5.5.4-8.16,6.21-8.16,6.21l-37.1,1.6h0l-.85.05-2-6.19a2.61,2.61,0,0,0-3.27-1.67,3,3,0,0,0-.45.19l-.14.08-.26.18-.13.12a2,2,0,0,0-.2.21l-.12.14-.06.06h0a2.52,2.52,0,0,0-.36,2.24l1.72,5.31c-7.16,1.44-14.48,5.5-8.51,16.68l-30.26-5.59,9.79,8.22,50.54,10.43c-.67,1.2-.23,2.94,1.86,5.39,9,10.57,25.4,13.44,32,14.18a56.81,56.81,0,0,0,6.49,11l-.57,10.53s-16.71,80.26-19.77,84.33a47.57,47.57,0,0,0,4.23-5.57c-4.85,16.49-11.63,39.06-13.41,42.44-2.86,5.4-5.51,27.25-2.25,28.65,1,.43,3.86.22,7.94-.09v1.81l-.18,68.59s.82,42.07-1.43,46.08-2.85,12.42-2.85,12.42-9,16.59-16.13,23.26a1.07,1.07,0,0,1-.16.14l-.22-1.56s-8.57,10.82-27.53,10.21c0,0-11.41,7.42,5.51,7.82s38.53-.6,38.53-.6,15.09-23,27.73-20v17.43h3.87V804.6a15.87,15.87,0,0,0,6.89-10.43,12.68,12.68,0,0,0-4.52-11.73,7.5,7.5,0,0,1-2.47-5.48l-.14.12c0-.35-.09-.71-.13-1.08-1.11-9-2.5-27.57,2.41-41.31,6.73-18.84,8.77-45.08,3.87-60.7a139.56,139.56,0,0,1-3.89-15.21c-.12-.65-.23-1.27-.33-1.85a78.85,78.85,0,0,1,9.93,2c11.35,3.13,36.18,3.71,57.38,3.54.05.58.11,1.19.18,1.8A65.5,65.5,0,0,0,998,676.79c2.66,8,3.88,43.27,3.88,43.27s3.43,29,1.56,40.8c-1,6.56-2,13.15-2.57,19.77v.13s-5.62,16-9.73,24.69c-.1.22-.21.44-.31.65a13,13,0,0,0-3.21.71s-5.51,11-11,12.82-3.67,7.81,8.76,5.61,31.2-4,31.2-4l.81-11.22,3.82-4.78-1,11.19,4.07-.8-.54-13.61,6.25-7.82s7.55-6.72-3.67-19.94v.29c-.12-.19-.23-.39-.36-.58l0-.06c-1.86-2.88-3.34-8.25-.63-17.78,4.9-17.22,7.75-32.85,7.75-32.85s10.94-41.87-2.21-61.68l.58,0a33.32,33.32,0,0,1-2.83-8.8q-.1-.54-.18-1.11c9.73-.56,19.28-2.32,27.07-6.12C1055.48,645.53,1050.79,546.17,1046.91,530.35Zm-123.53-69.3v.2l-2,.1Zm-6.86.95a2.21,2.21,0,0,0-.9.43,8.88,8.88,0,0,0-1.57,4.11l-3.12-.7s-2.19-.47-5.34-1l-1.49-1.5C908.2,463,912.46,462.5,916.52,462Z" transform="translate(-47.24 -58.63)" fill="url(#ad14f186-b27f-416c-b629-0bafa2f1236e-287)"/><polygon points="972.51 743.53 971.32 757.7 975.31 756.9 974.71 741.53 972.51 743.53" fill="#1d2366"/><path d="M928.72,734.88c-4.81,13.7-3.45,32.19-2.37,41.17.4,3.32.77,5.34.77,5.34s-7.19,16.38-7.79,17-21.16,13.17-21.16,13.17l-14.37,8.39s-14.58-6.39-7.59-8.59a10.61,10.61,0,0,0,3.77-2.57c7-6.65,15.79-23.18,15.79-23.18s.6-8.39,2.8-12.38,1.4-45.92,1.4-45.92l.17-68.35,0-8.91,27.35.2a61.89,61.89,0,0,0,1.18,9,137.59,137.59,0,0,0,3.81,15.16C937.3,690,935.3,716.11,928.72,734.88Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M927.12,781.39s-7.19,16.38-7.79,17-21.16,13.17-21.16,13.17l-14.37,8.39s-14.58-6.39-7.59-8.59a10.61,10.61,0,0,0,3.77-2.57l.62,4.37,4.79-.2,41-36.89C926.75,779.37,927.12,781.39,927.12,781.39Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M926.62,777l-41.23,37.14-4.79.2-1-7s-8.38,10.78-27,10.18c0,0-11.18,7.39,5.39,7.79s37.73-.6,37.73-.6,14.78-23,27.15-20v17.37h3.8V804.55a15.79,15.79,0,0,0,6.74-10.4A12.74,12.74,0,0,0,929,782.47,7.53,7.53,0,0,1,926.62,777Z" transform="translate(-47.24 -58.63)" fill="#1d2366"/><path d="M1023.55,756.24c-2.66,9.5-1.21,14.85.61,17.72l0,.06a32.75,32.75,0,0,1,4.78,11.67l.16.9-18.76,27.35-10.18,4s-16.37-5.59-13.38-7.19c.75-.39,1.92-2.47,3.26-5.34,4-8.65,9.52-24.61,9.52-24.61v-.13c.58-6.59,1.5-13.16,2.52-19.7,1.83-11.77-1.53-40.66-1.53-40.66s-1.2-35.13-3.8-43.12a65.93,65.93,0,0,1-2.33-12.44c-.54-5-.66-9.12-.66-9.12s10.78-15,30.54,1.2a21.74,21.74,0,0,1,4.13,4.48c13.65,19.42,2.66,62.2,2.66,62.2S1028.34,739.07,1023.55,756.24Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M1029.13,786.59l-18.76,27.35-10.18,4s-16.37-5.59-13.38-7.19c.75-.39,1.92-2.47,3.26-5.34,6.93-.06,10.52,6.54,10.52,6.54l8.78-1.4s11.58-22.76,14.18-24.15.4-10.39.4-10.39v-2.29c.07.08.13.17.21.25l0,.06a32.75,32.75,0,0,1,4.78,11.67Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M1001.19,812.54s-5-9.18-14.58-5.79c0,0-5.39,11-10.78,12.78s-3.59,7.78,8.59,5.59,30.54-4,30.54-4l.8-11.19,12.38-15.77s7.38-6.69-3.6-19.86v2.29s2.2,9-.4,10.39S1010,811.14,1010,811.14Z" transform="translate(-47.24 -58.63)" fill="#1d2366"/><path d="M927.52,650.23a61.89,61.89,0,0,0,1.18,9c-11.26-1.65-21.71-.83-28.56-.29l0-8.91Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M1029.54,663.8s-16,.78-35.08.94c-.54-5-.66-9.12-.66-9.12s10.78-15,30.54,1.2a21.74,21.74,0,0,1,4.13,4.48A24.4,24.4,0,0,0,1029.54,663.8Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M1029.54,662s-70.08,3.39-91.44-2.6-42.53-.8-45.72-2.19-.6-23.16,2.2-28.55,18.16-59.9,18.16-59.9l14.78-77.06,15.57-4.29,1.1-.31,27.13-7.48,19.88-5.49s39.53,154.33,36.14,165.71a29.14,29.14,0,0,0-.58,13.39A33.42,33.42,0,0,0,1029.54,662Z" transform="translate(-47.24 -58.63)" fill="#1d2366"/><path d="M876,439s-14,15-3.4,23.36,17.57.8,17.57.8Z" transform="translate(-47.24 -58.63)" fill="#c7daf5"/><path d="M876,439s-14,15-3.4,23.36,17.57.8,17.57.8Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M989.11,340.38s-1.64,1.56-4.11,3.86c-3.52,3.29-8.73,8.1-13.35,12.13-6.4,5.57-11.68,9.66-9.79,6.17s1.53-9.57.59-15.26c-.07-.38-.13-.76-.2-1.13a104.8,104.8,0,0,0-3.09-12.36s10.34-13.36,16.06-18.63c2.13-2,3.62-2.82,3.71-1.43.1,1.87,1.5,6,3.24,10.38.05.14.1.27.16.41,1.16,3,2.47,6.08,3.62,8.74C987.71,337.34,989.11,340.38,989.11,340.38Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M982.33,324.52a29.68,29.68,0,0,1-19.88,22.76,104.07,104.07,0,0,0-3.29-13.49s19.47-25.15,19.77-20.06C979,315.66,980.52,319.94,982.33,324.52Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M960.51,354l2.52-3.55s1.67,10.18,7.81,5.69,6.44,33.79,6.44,33.79l-6.59,98.53-47.62-2.85L924.42,438l5.39-24,13.33-34.89,7.93-11.53Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M977.28,390.54l-6,89.09-.63,9.44-26.55-1.59-1-.06-20-1.2,1.35-47.62,5.39-24,13.33-34.89,7.93-11.53,9.44-13.63,2.52-3.54s1.67,10.18,7.81,5.69l.13-.09h0C977,352.81,977.28,390.54,977.28,390.54Z" transform="translate(-47.24 -58.63)" fill="#1d2366"/><path d="M930.51,406.26s-2.39,5-7.19,4.19-4.79,18-4.79,18-3.19,3-5.39.4-8,6.19-8,6.19l-36.34,1.6s16.17,7.39,13,29.75c0,0,54.9-3.4,56.7-8.59S930.51,406.26,930.51,406.26Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M930.51,406.26s-2.39,5-7.19,4.19-4.79,18-4.79,18-3.19,3-5.39.4-8,6.19-8,6.19l-36.34,1.6s16.17,7.39,13,29.75c0,0,54.9-3.4,56.7-8.59S930.51,406.26,930.51,406.26Z" transform="translate(-47.24 -58.63)" opacity="0.03"/><polygon points="777.66 389.76 787.24 397.94 866.1 414.51 856.32 404.53 777.66 389.76" fill="#fff"/><path d="M960.66,357.15c-1.31,2-5.06,12.24-8.19,21.18-2.61,7.45-4.79,14-4.79,14s-5.09,33.14-7.69,39.13-1.19,29.35-1.19,29.35l-9.69,57.69s-4.39,29.75-11.17,47.52c-6.69,17.49-14.14,25.69-14.37,25.95,3-4.06,19.35-84,19.35-84l5.4-100.82s.79-9.58,1.59-17.77,17-19.37,17-19.37l15.62-22.21C964.1,349.9,963.05,353.56,960.66,357.15Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M919.93,486.72s-23-1-34.14-14.38S911.54,467,911.54,467l9.59,2.2Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M1027.34,639.85a29.14,29.14,0,0,0-.58,13.39c-25.09,1.78-51.93-5-51.93-5-5,4.6-18.17,11.38-18.17,11.38l-7.18-89c-4.59-12-6.39-74.87-6.39-74.87s.41-3.29,1-8.22c0-.12,0-.25.05-.37,1.79-13.77,5.34-39.62,7.08-43.11,2.4-4.8-7.38-17.57-7.38-17.57l4.45-37.95.54-4.58c9.38-4.19,16.57-17.57,16.57-17.57l5.52-9.67h0c6-3.85,6.31,33.88,6.31,33.88l-6,89.09,19.88-5.49S1030.73,628.47,1027.34,639.85Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M1053.09,646c-27.35,13.58-77.06,1-77.06,1-5,4.6-18.17,11.38-18.17,11.38l-7.19-89c-4.58-12-6.38-74.87-6.38-74.87s5.78-46.91,8.18-51.7c.7-1.4.36-3.48-.47-5.72a72.38,72.38,0,0,1-4.38-33.49l1.92-16.31.53-4.57c9.39-4.2,16.58-17.58,16.58-17.58l5-8.76,9.2-16.14,4.36-7.64.74.67,5.65,5.12s2.4,2,6,5c7.83,6.6,21.36,18.22,28.34,25.33,6.14,6.26,8.08,30.61,8.64,48.94.37,12.07.15,21.53.15,21.53-6.19,10.19,10,92,10,92C1048.5,547,1053.09,646,1053.09,646Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M1000.59,364.94S981.82,400.67,984,414.25s8.38,28.95,5.39,32.54a11.05,11.05,0,0,1-8.79,4.39c-3,.2-11,5.79-11,6.39s-7.39.6-14,3.4-16.37,4.39-16.37,4.39-19-.6-20.77,1.2-3.59,12.57.2,21.16,8,15,11.18,16.17,23.36-5.59,39.73-7.19,34.14-14.57,34.14-14.57,19.57-7,23-18.77-4.19-76.46-4.19-76.46S1016.76,356.75,1000.59,364.94Z" transform="translate(-47.24 -58.63)" opacity="0.03"/><path d="M998.19,361.94s-18.77,35.74-16.57,49.31S990,440.2,987,443.8a11,11,0,0,1-8.78,4.39c-3,.2-11,5.79-11,6.39s-7.39.6-14,3.39-16.37,4.39-16.37,4.39-19-.6-20.76,1.2-3.6,12.58.2,21.16,8,15,11.18,16.17,23.36-5.59,39.73-7.18,34.14-14.58,34.14-14.58,19.56-7,22.95-18.76-4.19-76.47-4.19-76.47S1014.36,353.76,998.19,361.94Z" transform="translate(-47.24 -58.63)" opacity="0.03"/><path d="M1000,363.14s-18.77,35.74-16.57,49.31,8.38,28.95,5.39,32.54a11,11,0,0,1-8.79,4.4c-3,.2-11,5.79-11,6.38s-7.38.6-14,3.4-16.37,4.39-16.37,4.39-19-.6-20.77,1.2-3.59,12.58.2,21.16,8,15,11.18,16.17,23.36-5.59,39.73-7.19,34.14-14.57,34.14-14.57,19.57-7,23-18.77S1022,385.1,1022,385.1,1016.16,355,1000,363.14Z" transform="translate(-47.24 -58.63)" fill="#fff"/><path d="M999.59,459s-15-3-9.78,2,5.19,9.38,11.58,9.18S999.59,459,999.59,459Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M1024.94,566.58s-6.78,4.59,6.19,15.17S1024.94,566.58,1024.94,566.58Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M1012,604.31c0,.6-2.4,22,6.58,27.35S1012,604.31,1012,604.31Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M869.42,436.59c-7.24.25-22.88,2.46-14.77,17.59,7.17,13.39,19.22,4.44,26-2.35A25.55,25.55,0,0,0,869.42,436.59Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M881.39,451v0Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M880.74,451.71l.3-.31Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M997.6,344c-7.68,5.25-14.12,9.68-15.38,10.6-3.44,2.55-10,17.52-14.23,25.16-3.37,6.15-14.32,7.73-18.45,8.12l.53-4.57c9.39-4.2,16.58-17.58,16.58-17.58l18.56-32.54L991.6,339S994,341,997.6,344Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M997.6,343.4c-7.68,5.25-14.12,9.68-15.38,10.61-3.44,2.54-10,17.51-14.23,25.15-3.37,6.15-14.32,7.73-18.45,8.12l.53-4.57c9.39-4.2,16.58-17.58,16.58-17.58l18.56-32.54,6.39,5.79S994,340.36,997.6,343.4Z" transform="translate(-47.24 -58.63)" fill="#dce7ff"/><path d="M982.82,317.92a29.61,29.61,0,0,1-5.22,16.81,29.66,29.66,0,1,1,5.22-16.81Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M1034.58,417.67a26.36,26.36,0,0,1-9.57-10.28c-1.67-3.3-2.78-7.11-5.63-9.45-2.57-2.1-6-2.61-9.2-3.55-10.52-3.11-19.34-12.71-19.67-23.67-.16-5.16,1.45-10.31.72-15.42a17.08,17.08,0,0,0-3.34-7.95,27.37,27.37,0,0,0-2.89-3.11c-1.4-1.32-2.87-2.6-4.15-4a15.53,15.53,0,0,1-2.1-2.85,13.71,13.71,0,0,1-1.15-2.65c-2-6.12-.18-13.38-2.38-19.57l-.12-.34c-.83-2.2-2.52-4.4-4.87-4.57s-4.36,1.78-6.6,2.65c-4.69,1.82-9.75-1.28-13.66-4.44s-8.32-6.77-13.29-6.07c-3.29.47-5.89,2.71-8.92,3.87a12.5,12.5,0,0,1-2.11.61,29.65,29.65,0,0,1,57.17,11.05,29.35,29.35,0,0,1-.65,6.19c.05.14.1.27.16.41,1.16,3,2.47,6.08,3.62,8.74l5.65,5.12s2.4,2,6,5c7.83,6.6,21.36,18.22,28.34,25.33C1032.08,375,1034,399.34,1034.58,417.67Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M927.41,288c1.43-2.91,2.14-6.17,3.85-8.93,2.51-4,6.89-6.56,11.39-8.11,11.75-4.05,36.58-9.93,44,0,1.46,2,2.67,4.22,4.69,5.6,1.54,1.05,3.4,1.5,5.09,2.29,4.73,2.22,7.75,7.06,9.36,12s2.09,10.24,3.27,15.33c1.51,6.53,4.16,12.72,6.8,18.87,3.11,7.26,6.41,14.79,12.41,19.92,8.19,7,10,16.91,17.6,24.59,9,9.12,8.71,24.17,4.07,36.12-.61,1.57-1.3,3.21-1.06,4.88s1.48,3.19,2.65,4.52l4.92,5.55c-11.64,2.81-24.81-3.27-30.23-13.94-1.67-3.3-2.78-7.1-5.64-9.45-2.56-2.1-6-2.6-9.19-3.54-10.52-3.12-19.34-12.73-19.67-23.69-.16-5.15,1.45-10.3.72-15.4a17,17,0,0,0-3.35-8c-2.75-3.59-6.9-6-9.14-10-3.79-6.69-.91-15.38-3.64-22.56-.84-2.2-2.52-4.4-4.87-4.57s-4.36,1.78-6.61,2.65c-4.68,1.82-9.74-1.27-13.65-4.44s-8.32-6.77-13.3-6.06c-3.29.46-5.88,2.7-8.91,3.87-2.24.86-6.78,1.63-8.74-.26C916.09,301.43,925.68,291.56,927.41,288Z" transform="translate(-47.24 -58.63)" fill="#591d4b"/><path d="M1029,403.39c-1.68-3.3-2.78-7.1-5.64-9.44-2.56-2.1-6-2.61-9.2-3.55-10.51-3.11-19.33-12.72-19.67-23.68-.16-5.15,1.45-10.31.73-15.41a17.1,17.1,0,0,0-3.35-7.95c-2.76-3.59-6.91-6-9.14-10-3.79-6.68-.91-15.37-3.65-22.56-.83-2.19-2.52-4.39-4.86-4.57s-4.37,1.79-6.61,2.66c-4.68,1.82-9.75-1.28-13.65-4.44s-8.33-6.77-13.3-6.07c-3.29.47-5.89,2.71-8.91,3.87-2.24.86-6.79,1.64-8.75-.25-4.12-4,5.47-13.85,7.19-17.39,1.43-2.92,2.14-6.17,3.86-8.93.09-.15.19-.3.29-.45a15.88,15.88,0,0,0-3.29,3.74c-1.71,2.76-2.42,6-3.85,8.93-1.73,3.54-11.32,13.42-7.19,17.39,2,1.9,6.5,1.12,8.74.26,3-1.17,5.62-3.41,8.91-3.87,5-.71,9.4,2.9,13.3,6.06s9,6.26,13.66,4.44c2.24-.87,4.2-2.83,6.6-2.65s4,2.37,4.87,4.57c2.73,7.18-.15,15.87,3.64,22.56,2.24,3.93,6.39,6.39,9.14,10a17,17,0,0,1,3.35,8c.73,5.1-.88,10.25-.72,15.4.33,11,9.15,20.57,19.67,23.69,3.17.94,6.63,1.44,9.19,3.54,2.87,2.35,4,6.15,5.64,9.45,5.42,10.67,18.59,16.75,30.23,13.94l-2.32-2.62C1043.82,418.21,1033.61,412.47,1029,403.39Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M960.06,357.75c-1.31,2-5.06,12.24-8.19,21.18-2.93-1.14-5.59-8.41-5.59-8.41L961.9,348.3C963.5,350.5,962.45,354.15,960.06,357.75Z" transform="translate(-47.24 -58.63)" opacity="0.1"/><path d="M960.66,357.15c-1.31,2-5.06,12.24-8.19,21.18-2.93-1.13-5.59-8.41-5.59-8.41l15.62-22.21C964.1,349.9,963.05,353.56,960.66,357.15Z" transform="translate(-47.24 -58.63)" fill="#dce7ff"/><path d="M869.84,459.31,861.18,432a2.55,2.55,0,0,1,1.66-3.21h0a2.56,2.56,0,0,1,3.2,1.66l8.66,27.28-.86,5.71Z" transform="translate(-47.24 -58.63)" fill="#be8b87"/><path d="M862,429.6h0a2.56,2.56,0,0,1,3.21,1.66l8.66,27.28-.65,4.28.63.66.86-5.71L866,430.49a2.56,2.56,0,0,0-3.2-1.66h0a2.56,2.56,0,0,0-1.33,1A3.48,3.48,0,0,1,862,429.6Z" transform="translate(-47.24 -58.63)" fill="#fff" opacity="0.1"/><polygon points="822.6 400.68 827.46 399.14 826.75 403.82 826.6 404.85 825.18 403.37 822.6 400.68" fill="#efc8c4"/><path d="M872.42,462a1,1,0,0,1,.31-.26.44.44,0,0,1,.47,0,1.24,1.24,0,0,1,.17.27.86.86,0,0,0,.62.41l-.15,1Z" transform="translate(-47.24 -58.63)" fill="#727a9c"/><path d="M861.13,441.7s17.37-.1,13.28,7.29-10.48,8.28-10.48,8.28Z" transform="translate(-47.24 -58.63)" fill="#ffb0b1"/><path d="M753.1,110.05h-.75c-29.84,0-56.23,15.79-71.41,39.09-15.18-23.3-41.57-39.09-71.41-39.09h-.75A85,85,0,0,0,524.59,195c0,27.81,12.18,67.27,35.93,99.74,45.25,61.87,120.42,116,120.42,116s75.17-54.12,120.41-116c23.76-32.47,35.93-71.93,35.93-99.74A85,85,0,0,0,753.1,110.05ZM742.37,299.5a16.85,16.85,0,0,1-15.67-10.82H708.86a5.64,5.64,0,0,1-5.31-3.84l-5.48-16.51-17.34,60.59a5.61,5.61,0,0,1-5.38,4.05H675a5.54,5.54,0,0,1-5.2-4.64L651.93,220.85l-13.06,63.6a5.57,5.57,0,0,1-5.41,4.23H608.33a5.59,5.59,0,1,1,0-11.17h20.73L647.56,192a5.61,5.61,0,0,1,11,.46l18.25,109.64,15.54-54.21a5.5,5.5,0,0,1,5.23-4h.11a5.58,5.58,0,0,1,5.3,3.84l9.91,29.81h13.58a16.76,16.76,0,1,1,15.92,22Z" transform="translate(-47.24 -58.63)" fill="#090450"/></svg>
\ No newline at end of file
/* Body */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #ffffff;
}
/* Main */
main {
max-width: 100%;
margin: 0 auto;
padding: 20px;
}
section {
margin-bottom: 30px;
}
h1,
h2 {
color: #333;
}
h1 {
margin-top: 0;
}
ul {
margin: 0;
padding: 0;
list-style: none;
}
.img1 {
display: block;
max-width: 30%;
height: auto;
float: right;
}
/* Footer */
footer {
background-color: #333;
color: #fff;
text-align: center;
padding: 20px;
margin-top: 40px;
}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<head>
<title>Smart E-Healthcare Application</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<main>
<section>
<h1>Welcome to VALEO LAB</h1>
<p>This is an online platform that provides
real-time predictions and detection of chronic diseases, such as lung disease, kidney disease, stroke,
and skin cancer. The website offers an easy-to-use interface and accurate analysis of medical data to
promote early detection and prevention of chronic diseases for better health outcomes.</p>
<img class="img1" src="/static/image_predc2.png" alt="Smart E-Healthcare Application">
</section>
<section>
<h2>How it Works</h2>
<p>Our application uses advanced algorithms to analyze medical data and provide accurate predictions and
detection for chronic diseases. Users can easily upload their medical data and receive real-time output.
</p>
</section>
<section>
<h2>Features</h2>
<ul>
<li>Real-time predictions and detection</li>
<li>Easy-to-use interface</li>
<li>Accurate analysis of medical data</li>
<li>Accessible from anywhere</li>
</ul>
</section>
</main>
</body>
{% endblock %}
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>My Home Page</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" />
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</head>
<body>
<header>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#"><img src="/static/logo.png" alt="Description of your image" /></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"><span
class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="{{ url_for('home') }}">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url_for('about') }}">About</a>
</li>
<li class="nav-item">
<div class="dropdown">
<a class="nav-link" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">Services</a>
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<a class="dropdown-item" href="{{ url_for('kidney') }}">Kidney Disease Detection</a>
<a class="dropdown-item" href="{{ url_for('lungcancer') }}">Lung Disease Detection</a>
<a class="dropdown-item" href="{{ url_for('stroke') }}">Stroke prediction</a>
<a class="dropdown-item" href="{{ url_for('skinCancerPage') }}">Skin Cancer Detection</a>
</div>
</div>
</li>
</ul>
</div>
</nav>
</header>
</body>
</html>
{% block main %}
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<head>
<title>Images with Buttons</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/static/style.css">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" />
<style>
body {
background-image: linear-gradient(to right, #cad3d5, #90bcd4);
}
.img2 {
max-width: 100%;
height: 200px;
/* adjust the height to your desired size */
object-fit: cover;
}
.btn {
margin-top: 10px;
}
</style>
</head>
<body>
<div class="container" style="padding-top: 2%;">
<div class="row">
<div class="col-md-6 text-center" style="padding-bottom: 1%;">
<img class="img2" src="/static/kidney.jpg" alt="Image 1" /><br />
<a href="{{ url_for('kidney') }}"> <button class="btn btn-primary">Kidney Disease</button></a>
</div>
<div class="col-md-6 text-center" style="padding-bottom: 1%;">
<img class="img2" src="/static/lung.jpg" alt="Image 2"><br />
<a href="{{ url_for('lungcancer') }}"> <button class="btn btn-primary">Lung
Disease</button></a>
</div>
</div>
<div class="row">
<div class="col-md-6 text-center">
<img class="img2" src="/static/stroke.jpg" alt="Image 3"><br />
<a href="{{ url_for('stroke') }}"><button class="btn btn-primary">Stroke</button></a>
</div>
<div class="col-md-6 text-center">
<img class="img2" src="/static/skin.jpg" alt="Image 4"><br />
<a href="{{ url_for('skinCancerPage') }}"><button class="btn btn-primary">Skin Cancer</button></a>
</div>
</div>
</div>
<!-- Bootstrap JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div class="container">
<div class="row">
<div class="col-md-4" style="margin-top: 5%;margin-left: 10%;">
<div class="card">
<img src="/static/text.png" class="card-img-top" alt="..." />
<div class="card-body" style="padding-top: 30%;">
<a href="{{ url_for('predictKidneypage') }}" class="btn btn-primary">Chronic Kidney Disease
Diagnosis</a>
<p class="card-text">Our web-based diagnostic tool enables easy and accurate diagnosis of chronic
kidney disease, empowering patients to take control of their health.</p>
</div>
</div>
</div>
<div class="col-md-4" style="margin-top: 5%;margin-left: 10%;">
<div class="card" style="padding-bottom: 8%;">
<img src="/static/ct.png" class="card-img-top" alt="..." />
<div class="card-body">
<a href="{{ url_for('kidneyDisease') }}" class="btn btn-primary">Detect Chronic Kidney
Disease</a>
<p class="card-text">This website can easily diagnose Chronic Kidney Disease using CT images,
providing a quick and accurate diagnosis for patients.</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Detect Kidney Disease</h2>
<div class="alert alert-primary" role="alert">Please input image</div>
</div>
<form action="{{ url_for('process_image_kidney') }}" method="post" enctype="multipart/form-data" style="margin-left: 5%;margin-right: 40%;margin-bottom: 5%;">
<div class="form-group">
<input type="file" name="file" class="form-control" />
<input type="submit" class="btn btn-primary" value="Upload" style="margin-top:2%" />
</div>
</form>
{% endblock %}
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Predict Kidney Disease </h2>
<div class="alert alert-primary" role="alert">
Please enter your symptoms
</div>
</div>
<form method="post" action="{{ url_for('predictKidney') }}" style="margin-left: 5%;margin-right: 5%;margin-bottom: 5%;">
<div class="form-group">
<label>Blood Pressure(80 mm Hg - 120 mm Hg)</label>
<input type="number" step="0.01" name="bp" class="form-control" />
</div>
<div class="form-group">
<label>Specific Gravity(1.005 - 1.030)</label>
<input type="number" step="0.01" name="sg" class="form-control" />
</div>
<div class="form-group">
<label for="rbc">Red Blood Cells</label>
<select class="form-control" id="rbc" name="rbc">
<option value="0">Normal</option>
<option value="1">Abnormal</option>
</select>
</div>
<div class="form-group">
<label>Blood Urea(1.5 mmol - 300 mmol)</label>
<input type="number" step="0.01" name="bu" class="form-control" />
</div>
<div class="form-group">
<label>Serum Creatinine(1 mg/dl - 10 mg/dl)</label>
<input type="number" step="0.01" name="sc" class="form-control" />
</div>
<div class="form-group">
<label>Sodium(99 mEq/L - 160 mEq/L)</label>
<input type="number" step="0.01" name="sod" class="form-control" />
</div>
<div class="form-group">
<label>Pottasium(3.0 mEq/L - 6.0 mEq/L)</label>
<input type="number" step="0.01" name="pot" class="form-control" />
</div>
<div class="form-group">
<label>Hemoglobin(11.0 g/dL - 18.0 g/dL)</label>
<input type="number" step="0.01" name="hemo" class="form-control" />
</div>
<div class="form-group">
<label>White Blood Cell Count(4000 - 12 000)</label>
<input type="number" step="0.01" name="wbcc" class="form-control" />
</div>
<div class="form-group">
<label>Red Blood Cell Count(2.0 cells/mcL - 5.0 cells/mcL)</label>
<input type="number" step="0.01" name="rbcc" class="form-control" />
</div>
<div class="form-group">
<label for="htn">Hypertension (1 / 0)</label>
<select class="form-control" id="htn" name="htn">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div class="container">
<div class="row">
<div class="col-md-4" style="margin-top: 5%;margin-left: 10%;">
<div class="card">
<img src="/static/text.png" class="card-img-top" alt="..." />
<div class="card-body" style="padding-top: 30%;">
<a href="{{ url_for('lungpradict') }}" class="btn btn-primary">Predict Lung Disease</a>
<p class="card-text">Get a lung cancer prediction test easily on this website, with just a few
clicks and without leaving your home.</p>
</div>
</div>
</div>
<div class="col-md-4" style="margin-top: 5%;margin-left: 10%;">
<div class="card" style="padding-bottom: 8%;">
<img src="/static/ct.png" class="card-img-top" alt="..." />
<div class="card-body">
<a href="{{ url_for('lungxray') }}" class="btn btn-primary">Detect Lung Disease Using X-ray</a>
<p class="card-text">CT imaging can generate high-resolution X-ray images that can be used to
identify lung diseases. You can visit our website for convenient testing and precise results. We
strongly advise you not to postpone your health.</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Detect X-ray Lung Diseases</h2>
<div class="alert alert-primary" role="alert">Please input image</div>
</div>
<form action="{{ url_for('process_image_lung') }}" method="post" enctype="multipart/form-data"
style="margin-left: 5%;margin-right: 40%;margin-bottom: 5%;">
<div class="form-group">
<input type="file" name="file" class="form-control" />
<input type="submit" class="btn btn-primary" value="Upload" style="margin-top:2%" />
</div>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Lung Disease Prediction</h2>
<div class="alert alert-primary" role="alert">
Please enter your symptoms
</div>
</div>
<form method="post" action="{{ url_for('predictLungCancer') }}"
style="margin-left: 5%;margin-right: 5%;margin-bottom: 5%;">
<div class="form-group">
<label for="GENDER">Select gender</label>
<select class="form-control" id="GENDER" name="GENDER">
<option value="0">Male</option>
<option value="1">Female</option>
</select>
</div>
<div class="form-group">
<label for="AGE">Select age</label>
<select class="form-control" id="AGE" name="AGE">
{% for i in range(1, 101) %}
<option value="{{ i }}">{{ i }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label for="SMOKING">Smoking status</label>
<select class="form-control" id="SMOKING" name="SMOKING">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="YELLOW_FINGERS">Is fingers yellow?</label>
<select class="form-control" id="YELLOW_FINGERS" name="YELLOW_FINGERS">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="ANXIETY">Anxiety status</label>
<select class="form-control" id="ANXIETY" name="ANXIETY">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="PEER_PRESSURE">Pressure from outside?</label>
<select class="form-control" id="PEER_PRESSURE" name="PEER_PRESSURE">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="CHRONICDISEASE">Suffer from chronic disease?</label>
<select class="form-control" id="CHRONICDISEASE" name="CHRONICDISEASE">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="FATIGUE">Are you fatigue?</label>
<select class="form-control" id="FATIGUE" name="FATIGUE">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="ALLERGY">Do you have allergy?</label>
<select class="form-control" id="ALLERGY" name="ALLERGY">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="WHEEZING">Do you have wheeze?</label>
<select class="form-control" id="WHEEZING" name="WHEEZING">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="ALCOHOL">Do you use alcohol?</label>
<select class="form-control" id="ALCOHOL" name="ALCOHOL">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="COUGHING">Do you have cough?</label>
<select class="form-control" id="COUGHING" name="COUGHING">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="SHORTBREATH">Are you having short breath?</label>
<select class="form-control" id="SHORTBREATH" name="SHORTBREATH">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="SWALLOW">Any swallow difficulty?</label>
<select class="form-control" id="SWALLOW" name="SWALLOW">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label for="CHESTPAIN">Any chest pain?</label>
<select class="form-control" id="CHESTPAIN" name="CHESTPAIN">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Calculating The Risk Of Lung Disease </h2>
<div class="alert alert-primary" role="alert">
Please enter your symptoms
</div>
</div>
<form method="post" action="{{ url_for('predictLungCancerLevel') }}"
style="margin-left: 5%;margin-right: 5%;margin-bottom: 5%;">
<div class="form-group">
<label for="GENDER">Select gender</label>
<select class="form-control" id="GENDER" name="GENDER">
<option value="0">Male</option>
<option value="1">Female</option>
</select>
</div>
<div class="form-group">
<label for="AGE">Select age</label>
<select class="form-control" id="AGE" name="AGE">
{% for i in range(1, 101) %}
<option value="{{ i }}">{{ i }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label for="SMOKING">Smoking status</label>
<select class="form-control" id="SMOKING" name="SMOKING">
<option value="1">Minimal dependence</option>
<option value="2">Mild dependence</option>
<option value="3">Moderate dependence</option>
<option value="4">Moderate to high dependence</option>
<option value="5">High dependence</option>
<option value="6">Very high dependence</option>
<option value="7">Severe dependence</option>
<option value="8">Extreme dependence</option>
</select>
</div>
<div class="form-group">
<label for="FATIGUE">Are you fatigue?</label>
<select class="form-control" id="FATIGUE" name="FATIGUE">
<option value="1">Feeling alert and well-rested</option>
<option value="2">Feeling a little tired, but able to function normally</option>
<option value="3">Feeling somewhat tired, with a noticeable decrease in energy levels</option>
<option value="4">Feeling quite tired, with difficulty focusing and a strong desire to rest</option>
<option value="5">Feeling very tired, with significant difficulty concentrating and a strong urge to sleep
</option>
<option value="6">Feeling extremely tired, with severe difficulty staying awake and a strong need to rest
immediately</option>
<option value="7">Feeling completely exhausted, with a complete inability to stay awake and a strong need to
sleep immediately</option>
</select>
</div>
<div class="form-group">
<label for="ALLERGY">Do you have allergy?</label>
<select class="form-control" id="ALLERGY" name="ALLERGY">
<option value="1">Mild</option>
<option value="2">Mild to Moderate</option>
<option value="3">Moderate</option>
<option value="4">Moderate to to Severe</option>
<option value="5">Severe</option>
<option value="6">Very Severe</option>
<option value="7">Dangerous</option>
<option value="8">Fatal</option>
</select>
</div>
<div class="form-group">
<label for="WHEEZING">Do you have wheeze?</label>
<select class="form-control" id="WHEEZING" name="WHEEZING">
<option value="1">Occasional wheezing, heard only with a stethoscope</option>
<option value="2">Wheezing is audible without a stethoscope, but only during expiration (breathing out)
</option>
<option value="3"> Wheezing is audible both during inspiration (breathing in) and expiration (breathing
out), but still relatively mild </option>
<option value="4">Wheezing is louder and more intense, and may be accompanied by a feeling of tightness in
the chest</option>
<option value="5">Wheezing is even louder and more intense, and breathing may be more difficult </option>
<option value="6"> Wheezing is extremely loud and may be heard from a distance, breathing is difficult and
may require medical intervention </option>
<option value="7">Wheezing is very severe, and the person may be in respiratory distress</option>
<option value="8">Complete respiratory failure, requiring immediate medical attention</option>
</select>
</div>
<div class="form-group">
<label for="ALCOHOL">Do you use alcohol?</label>
<select class="form-control" id="ALCOHOL" name="ALCOHOL">
<option value="1">No alcohol intake</option>
<option value="2">Light alcohol intake</option>
<option value="3">Moderate alcohol intake</option>
<option value="4">Heavy alcohol intake</option>
<option value="5">Binge drinking</option>
<option value="6">Alcohol abuse</option>
<option value="7">Alcohol dependence</option>
<option value="8">Alcohol withdrawal</option>
</select>
</div>
<div class="form-group">
<label for="COUGHING">Do you have cough?</label>
<select class="form-control" id="COUGHING" name="COUGHING">
<option value="1">No coughing</option>
<option value="2">Mild coughing</option>
<option value="3">Mild to moderate coughing</option>
<option value="4">Moderate coughing</option>
<option value="5">Moderate to severe coughing</option>
<option value="6">Severe coughing</option>
<option value="7">Very severe coughing</option>
</select>
</div>
<div class="form-group">
<label for="SHORTBREATH">Are you having short breath?</label>
<select class="form-control" id="SHORTBREATH" name="SHORTBREATH">
<option value="1">Mild</option>
<option value="2">Mild to moderate</option>
<option value="3">Moderate</option>
<option value="4">Moderate to severe</option>
<option value="5">Severe</option>
<option value="6">Very Severe</option>
<option value="7">Panic</option>
<option value="8">Respiratory arrest</option>
<option value="9">Cardiac arrest</option>
</select>
</div>
<div class="form-group">
<label for="SWALLOW">Any swallow difficulty?</label>
<select class="form-control" id="SWALLOW" name="SWALLOW">
<option value="1">Normal swallow function</option>
<option value="2">Mild difficulty with swallowing, but able to eat a regular diet</option>
<option value="3">Moderate difficulty with swallowing, requiring modifications to the diet</option>
<option value="4">Severe difficulty with swallowing, requiring a soft or pureed diet and thickened liquids
</option>
<option value="5">Unable to swallow solid foods, requiring a pureed diet and thickened liquids</option>
<option value="6">Unable to swallow, requiring non-oral feeding such as a feeding tube</option>
<option value="7">Non-oral feeding is not possible, and the person is at risk of aspiration</option>
<option value="8">Complete dysphagia, with no oral feeding possible</option>
</select>
</div>
<div class="form-group">
<label for="CHESTPAIN">Any chest pain?</label>
<select class="form-control" id="CHESTPAIN" name="CHESTPAIN">
<option value="1">Chest pain is barely noticeable or not present at all</option>
<option value="2">Mild chest pain</option>
<option value="3">Mild to moderate chest pain</option>
<option value="4">Moderate chest pain</option>
<option value="5">Moderate to severe chest pain</option>
<option value="6">Severe chest pain</option>
<option value="7">Very severe chest pain</option>
<option value="8">Intense chest pain</option>
<option value="9">Excruciating chest pain</option>
</select>
</div>
<div class="form-group">
<label for="GENETICRISK">Does anyone in your household have this disease?</label>
<select class="form-control" id="GENETICRISK" name="GENETICRISK">
<option value="1">No family history of lung cancer, and no known genetic mutations associated with lung
cancer</option>
<option value="2">No family history of lung cancer, but has one or more environmental risk factors (e.g.
smoking, exposure to radon, air pollution)</option>
<option value="3">Has a family history of lung cancer, but no known genetic mutations associated with the
disease</option>
<option value="4">Has a family history of lung cancer and a known genetic mutation associated with the
disease, but does not smoke</option>
<option value="5">Has a family history of lung cancer and a known genetic mutation associated with the
disease, and smokes</option>
<option value="6">Has multiple family members with lung cancer and/or a strong family history of other
smoking-related cancers (e.g. bladder, throat, or esophageal cancer), and may have a genetic
predisposition to smoking addiction</option>
<option value="7">Has a known genetic syndrome associated with lung cancer, such as Li-Fraumeni syndrome or
BRCA2 mutation</option>
</select>
</div>
<div class="form-group">
<label for="COUGHINGBLOOD">Coughing up blood?</label>
<select class="form-control" id="COUGHINGBLOOD" name="COUGHINGBLOOD">
<option value="1">Minimal or trace amounts of blood in sputum</option>
<option value="2">Blood streaks in sputum</option>
<option value="3">Small blood clots in sputum</option>
<option value="4">Moderate amount of blood in sputum</option>
<option value="5">Large blood clots in sputum</option>
<option value="6">Profuse bleeding with constant coughing of blood</option>
<option value="7">Blood pouring from the mouth in a steady stream</option>
<option value="8">Blood vomiting</option>
<option value="8">Massive bleeding leading to death</option>
</select>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div class="card" style="width: 25rem;margin-left: 35%;margin-top: 5%;">
<img class="card-img-top" src="/static/results.png" alt="Card image cap" />
<div class="card-body">
{% if textshow %}
<h3 class="card-title">Results</h3>
<p class="card-text">{{ result }}<sup>2</sup></p>
<a href="{{ url_for('home') }}" class="btn btn-primary" style="text-align:right;">Home</a>
{% if show_button %}
<a href="{{ url_for('lungcancerlevel') }}" class="btn btn-primary">Predict Lung Disease Risk</a>
{% endif %}>
{%else%}
<h3 class="card-title">Results</h3>
<p class="card-text">{{ result }}</p>
<a href="{{ url_for('home') }}" class="btn btn-primary" style="text-align:right;">Home</a>
{% if show_button %}
<a href="{{ url_for('lungcancerlevel') }}" class="btn btn-primary">Predict Lung Disease Risk</a>
{% endif %}
{% endif %}
</div>
</div>
<div class="card" style="width: 90%;margin-top: 5%;margin-left: 5%;">
<div class="card-body">
<h3 class="card-title">Recommoned Doctors</h3>
{% if rec %}
{{ rec|safe }}
{% else %}
<p>No results found.</p>
{% endif %}
<a href="{{ url_for('home') }}" class="btn btn-primary" style="text-align:right;">Home</a>
</div>
</div>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div class="container">
<div class="row">
<div class="col-md-4" style="margin-top: 5%;margin-left: 10%;">
<div class="card">
<img src="/static/text.png" class="card-img-top" alt="..." />
<div class="card-body" style="padding-top: 30%;">
<a href="{{ url_for('skincancer') }}" class="btn btn-primary">Detect Skin Diseases
Diagnosis</a>
<p class="card-text">Our website provides accurate detection of various skin diseases. Get quick
results and take the necessary steps towards treatment.</p>
</div>
</div>
</div>
<div class="col-md-4" style="margin-top: 5%;margin-left: 10%;">
<div class="card" style="padding-bottom: 8%;">
<img src="/static/ct.png" class="card-img-top" alt="..." />
<div class="card-body">
<a href="{{ url_for('skinTumor') }}" class="btn btn-primary">Melanoma Tumor Size Prediction
Disease</a>
<p class="card-text">Our website offers Melanoma Tumor Size Prediction with accuracy. Get quick
results and early detection in just a few clicks.</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Melanoma Tumor Size Prediction</h2>
<div class="alert alert-primary" role="alert">
Please enter tumor shape
</div>
</div>
<form method="post" action="{{ url_for('tumor') }}" style="margin-left: 5%;margin-right: 5%;margin-bottom: 5%;">
<div class="form-group">
<label>The mass of the area understudy for melanoma tumor (mg)</label>
<input type="number" step="0.01" name="mass_npea" class="form-control" />
</div>
<div class="form-group">
<label>The size of the area understudy for melanoma tumor (mm)<sup>2</sup></label>
<input type="number" step="0.01" name="size_npear" class="form-control" />
</div>
<div class="form-group">
<label>Ration of normal to malign surface understudy (mm)<sup>2</sup></label>
<input type="number" step="0.01" name="malign_ratio" class="form-control" />
</div>
<div class="form-group">
<label>Unrecoverable area of skin damaged by the tumor (mm)<sup>2</sup></label>
<input type="number" step="0.01" name="damage_size" class="form-control" />
</div>
<div class="form-group">
<label>Total area exposed to the tumor (mm)<sup>2</sup></label>
<input type="number" step="0.01" name="exposed_area" class="form-control" />
</div>
<div class="form-group">
<label>Sandard deviation of malign skin measurements (mm)<sup>2</sup></label>
<input type="number" step="0.01" name="std_dev_malign" class="form-control" />
</div>
<div class="form-group">
<label>Error in malign skin measurements (mm)<sup>2</sup></label>
<input type="number" step="0.01" name="err_malign" class="form-control" />
</div>
<div class="form-group">
<label>Penalty applied due to measurement error in the lab (mm)<sup>2</sup></label>
<input type="number" step="0.01" name="malign_penalty" class="form-control" />
</div>
<div class="form-group">
<label>The ratio of damage to total spread on the skin</label>
<input type="number" step="0.01" name="damage_ratio" class="form-control" />
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Detect Skin Cancer</h2>
<div class="alert alert-primary" role="alert">Please input image</div>
</div>
<form action="{{ url_for('process_image_skin') }}" method="post" enctype="multipart/form-data"
style="margin-left: 5%;margin-right: 40%;margin-bottom: 5%;">
<div class="form-group">
<input type="file" name="file" class="form-control" />
<input type="submit" class="btn btn-primary" value="Upload" style="margin-top:2%" />
</div>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div class="container">
<div class="row">
<div class="col-md-4" style="margin-top: 5%;margin-left: 10%;">
<div class="card">
<img src="/static/text.png" class="card-img-top" alt="..." />
<div class="card-body" style="padding-top: 30%;">
<a href="{{ url_for('predictStrokepage') }}" class="btn btn-primary">Predict Stroke
Diagnosis</a>
<p class="card-text">Our website provides predictive models for stroke risk assessment based on
various risk factors. These models can help individuals and healthcare providers make informed
decisions regarding stroke prevention and management.</p>
</div>
</div>
</div>
<div class="col-md-4" style="margin-top: 5%;margin-left: 10%;">
<div class="card" style="padding-bottom: 8%;">
<img src="/static/ct.png" class="card-img-top" alt="..." />
<div class="card-body">
<a href="{{ url_for('predictStrokeCt') }}" class="btn btn-primary">Brain Stroke Detection</a>
<p class="card-text">Our website offers Brain Stroke Detection using advanced AI algorithms and
state-of-the-art medical imaging technology for accurate diagnosis and timely treatment of
strokes.</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Detect Stroke</h2>
<div class="alert alert-primary" role="alert">Please input image</div>
</div>
<form action="{{ url_for('process_image_stroke') }}" method="post" enctype="multipart/form-data"
style="margin-left: 5%;margin-right: 40%;margin-bottom: 5%;">
<div class="form-group">
<input type="file" name="file" class="form-control" />
<input type="submit" class="btn btn-primary" value="Upload" style="margin-top:2%" />
</div>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block main %}
<div style="margin-left: 5%;margin-top: 2%;margin-right: 5%;">
<h2>Predict Stroke </h2>
</div>
<form method="post" action="{{ url_for('predictStroke') }}" style="margin-left: 5%;margin-right: 5%;margin-bottom: 5%;">
<div class="form-group">
<label>Gender</label>
<select class="form-control" id="gender" name="gender">
<option value="0">Male</option>
<option value="1">Female</option>
<option value="2">Other</option>
</select>
</div>
<div class="form-group">
<label>Age</label>
<select class="form-control" id="age" name="age">
{% for i in range(1, 101) %}
<option value="{{ i }}">{{ i }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label>Hypertension</label>
<select class="form-control" id="hypertension" name="hypertension">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label>Previous Heart Disease?</label>
<select class="form-control" id="heart_disease" name="heart_disease">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label>Marital Status</label>
<select class="form-control" id="ever_married" name="ever_married">
<option value="0">No</option>
<option value="1">Yes</option>
</select>
</div>
<div class="form-group">
<label>What is you work type?</label>
<select class="form-control" id="work_type" name="work_type">
<option value="0">Self-employed</option>
<option value="1">Private</option>
<option value="2">Government </option>
<option value="3">Child</option>
<option value="4">Not employed</option>
</select>
</div>
<div class="form-group">
<label>What is your recidance type?</label>
<select class="form-control" id="Residence_type" name="Residence_type">
<option value="0">Rural</option>
<option value="1">Urban</option>
</select>
</div>
<div class="form-group">
<label>Avarage lucose level</label>
<input type="number" step="0.01" name="avg_glucose_level" class="form-control" />
</div>
<div class="form-group">
<label>BMI value</label>
<input type="number" step="0.01" name="bmi" class="form-control" />
</div>
<div class="form-group">
<label>Do you smoke?</label>
<select class="form-control" id="smoking_status" name="smoking_status">
<option value="0">Smokes</option>
<option value="1">Never smoked</option>
<option value="2">Formely smoked</option>
<option value="3">Unknown</option>
</select>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
{% endblock %}
\ No newline at end of file
Markdown is supported
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