Maaz commited on
Commit
7166038
·
verified ·
1 Parent(s): 8683bf1

Upload 27 files

Browse files
.gitignore ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+
110
+ # pdm
111
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
112
+ #pdm.lock
113
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
114
+ # in version control.
115
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
116
+ .pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
+ __pypackages__/
122
+
123
+ # Celery stuff
124
+ celerybeat-schedule
125
+ celerybeat.pid
126
+
127
+ # SageMath parsed files
128
+ *.sage.py
129
+
130
+ # Environments
131
+ .env
132
+ .venv
133
+ env/
134
+ venv/
135
+ ENV/
136
+ env.bak/
137
+ venv.bak/
138
+
139
+ # Spyder project settings
140
+ .spyderproject
141
+ .spyproject
142
+
143
+ # Rope project settings
144
+ .ropeproject
145
+
146
+ # mkdocs documentation
147
+ /site
148
+
149
+ # mypy
150
+ .mypy_cache/
151
+ .dmypy.json
152
+ dmypy.json
153
+
154
+ # Pyre type checker
155
+ .pyre/
156
+
157
+ # pytype static type analyzer
158
+ .pytype/
159
+
160
+ # Cython debug symbols
161
+ cython_debug/
162
+
163
+ # PyCharm
164
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
165
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
167
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168
+ #.idea/
169
+
170
+ # PyPI configuration file
171
+ .pypirc
README.md CHANGED
@@ -1,10 +1,130 @@
1
- ---
2
- title: Recomm Sys
3
- emoji: 🐠
4
- colorFrom: blue
5
- colorTo: green
6
- sdk: docker
7
- pinned: false
8
- ---
9
-
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # DiabetesPred: AI-Powered Glycemic Risk Assessment System
2
+
3
+ ## Overview
4
+
5
+ DiabetesPred is an advanced machine learning system designed to assess diabetes risk and provide personalized health recommendations. By analyzing key health metrics, the system delivers accurate risk predictions alongside actionable lifestyle guidance, empowering users to make informed health decisions.
6
+
7
+ ## Core Capabilities
8
+
9
+ ### Risk Assessment Engine
10
+ - Leverages machine learning for precise diabetes risk classification
11
+ - Processes multiple health parameters including glucose levels, blood pressure, BMI, and insulin
12
+ - Delivers confidence-scored predictions based on comprehensive health data analysis
13
+
14
+ ### Smart Recommendation System
15
+ The system generates tailored health guidance across four key domains:
16
+ - Nutrition & Diet Management
17
+ - Physical Activity Planning
18
+ - Lifestyle Optimization
19
+ - Health Monitoring Protocols
20
+
21
+ ### Intelligent Data Processing
22
+ - Robust data validation and anomaly detection
23
+ - Advanced feature engineering for improved prediction accuracy
24
+ - Standardized input processing for consistent results
25
+
26
+ ## Technical Architecture
27
+
28
+ ### Input Processing Layer
29
+ Handles critical health metrics including:
30
+ - Glucose measurements
31
+ - Blood pressure readings
32
+ - BMI calculations
33
+ - Insulin levels
34
+ - Age-related factors
35
+ - Diabetes pedigree function
36
+ - Skin thickness measurements
37
+
38
+ ### ML Pipeline Components
39
+ - Data cleaning and normalization
40
+ - Feature scaling and selection
41
+ - Model training with hyperparameter optimization
42
+ - Performance evaluation using F1-score, Precision, and Recall
43
+
44
+ ### Output Generation
45
+ - Clear HTML-based reporting
46
+ - Confidence-scored predictions
47
+ - Structured health recommendations
48
+ - Actionable insights presentation
49
+
50
+ ## Implementation Highlights
51
+
52
+ ### Data Integrity
53
+ - Comprehensive validation checks for input parameters
54
+ - Anomaly detection for unrealistic health metrics
55
+ - Error handling with informative user feedback
56
+
57
+ ### Intelligence Layer
58
+ - Advanced supervised learning algorithms
59
+ - Feature importance analysis
60
+ - Dynamic recommendation generation via GenAI API
61
+
62
+ ### User Experience
63
+ - Clean, intuitive HTML reports
64
+ - Categorized health insights
65
+ - Clear action items and next steps
66
+
67
+ ## Development Roadmap
68
+
69
+ ### Immediate Pipeline
70
+ - Enhanced feature set integration
71
+ - Advanced visualization capabilities
72
+ - Mobile platform adaptation
73
+
74
+ ### Future Enhancements
75
+ - Real-time monitoring capabilities
76
+ - Extended health metrics support
77
+ - AI explainability features
78
+ - Progress tracking visualization
79
+
80
+ ## Technical Requirements
81
+
82
+ ### System Dependencies
83
+ - Python 3.8+
84
+ - Machine Learning Framework (TensorFlow/PyTorch)
85
+ - GenAI API access
86
+ - HTML rendering capabilities
87
+
88
+ ### Input Data Format
89
+ All health metrics should be provided in standard medical units:
90
+ - Glucose: mg/dL
91
+ - Blood Pressure: mmHg
92
+ - BMI: kg/m²
93
+ - Insulin: μU/mL
94
+
95
+ ## Impact and Applications
96
+
97
+ ### Healthcare Providers
98
+ - Rapid patient risk assessment
99
+ - Data-driven treatment planning
100
+ - Automated health recommendations
101
+
102
+ ### Individual Users
103
+ - Proactive health monitoring
104
+ - Personalized lifestyle guidance
105
+ - Early risk detection
106
+
107
+ ### Research Applications
108
+ - Population health analysis
109
+ - Risk factor correlation studies
110
+ - Treatment efficacy assessment
111
+
112
+ ## Project Status
113
+ Current Version: 1.0.0
114
+ - Stable production release
115
+ - Validated prediction model
116
+ - Integrated recommendation system
117
+ - HTML report generation
118
+
119
+ ## Contributing
120
+ We welcome contributions in the following areas:
121
+ - Model optimization
122
+ - Feature engineering
123
+ - User interface enhancement
124
+ - Documentation improvement
125
+
126
+ ## License
127
+ [Insert License Information]
128
+
129
+ ## Contact
130
+ [Insert Project Contact Information]
data/diabetes.csv ADDED
@@ -0,0 +1,769 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Pregnancies,Glucose,BloodPressure,SkinThickness,Insulin,BMI,DiabetesPedigreeFunction,Age,Outcome
2
+ 6,148,72,35,0,33.6,0.627,50,1
3
+ 1,85,66,29,0,26.6,0.351,31,0
4
+ 8,183,64,0,0,23.3,0.672,32,1
5
+ 1,89,66,23,94,28.1,0.167,21,0
6
+ 0,137,40,35,168,43.1,2.288,33,1
7
+ 5,116,74,0,0,25.6,0.201,30,0
8
+ 3,78,50,32,88,31,0.248,26,1
9
+ 10,115,0,0,0,35.3,0.134,29,0
10
+ 2,197,70,45,543,30.5,0.158,53,1
11
+ 8,125,96,0,0,0,0.232,54,1
12
+ 4,110,92,0,0,37.6,0.191,30,0
13
+ 10,168,74,0,0,38,0.537,34,1
14
+ 10,139,80,0,0,27.1,1.441,57,0
15
+ 1,189,60,23,846,30.1,0.398,59,1
16
+ 5,166,72,19,175,25.8,0.587,51,1
17
+ 7,100,0,0,0,30,0.484,32,1
18
+ 0,118,84,47,230,45.8,0.551,31,1
19
+ 7,107,74,0,0,29.6,0.254,31,1
20
+ 1,103,30,38,83,43.3,0.183,33,0
21
+ 1,115,70,30,96,34.6,0.529,32,1
22
+ 3,126,88,41,235,39.3,0.704,27,0
23
+ 8,99,84,0,0,35.4,0.388,50,0
24
+ 7,196,90,0,0,39.8,0.451,41,1
25
+ 9,119,80,35,0,29,0.263,29,1
26
+ 11,143,94,33,146,36.6,0.254,51,1
27
+ 10,125,70,26,115,31.1,0.205,41,1
28
+ 7,147,76,0,0,39.4,0.257,43,1
29
+ 1,97,66,15,140,23.2,0.487,22,0
30
+ 13,145,82,19,110,22.2,0.245,57,0
31
+ 5,117,92,0,0,34.1,0.337,38,0
32
+ 5,109,75,26,0,36,0.546,60,0
33
+ 3,158,76,36,245,31.6,0.851,28,1
34
+ 3,88,58,11,54,24.8,0.267,22,0
35
+ 6,92,92,0,0,19.9,0.188,28,0
36
+ 10,122,78,31,0,27.6,0.512,45,0
37
+ 4,103,60,33,192,24,0.966,33,0
38
+ 11,138,76,0,0,33.2,0.42,35,0
39
+ 9,102,76,37,0,32.9,0.665,46,1
40
+ 2,90,68,42,0,38.2,0.503,27,1
41
+ 4,111,72,47,207,37.1,1.39,56,1
42
+ 3,180,64,25,70,34,0.271,26,0
43
+ 7,133,84,0,0,40.2,0.696,37,0
44
+ 7,106,92,18,0,22.7,0.235,48,0
45
+ 9,171,110,24,240,45.4,0.721,54,1
46
+ 7,159,64,0,0,27.4,0.294,40,0
47
+ 0,180,66,39,0,42,1.893,25,1
48
+ 1,146,56,0,0,29.7,0.564,29,0
49
+ 2,71,70,27,0,28,0.586,22,0
50
+ 7,103,66,32,0,39.1,0.344,31,1
51
+ 7,105,0,0,0,0,0.305,24,0
52
+ 1,103,80,11,82,19.4,0.491,22,0
53
+ 1,101,50,15,36,24.2,0.526,26,0
54
+ 5,88,66,21,23,24.4,0.342,30,0
55
+ 8,176,90,34,300,33.7,0.467,58,1
56
+ 7,150,66,42,342,34.7,0.718,42,0
57
+ 1,73,50,10,0,23,0.248,21,0
58
+ 7,187,68,39,304,37.7,0.254,41,1
59
+ 0,100,88,60,110,46.8,0.962,31,0
60
+ 0,146,82,0,0,40.5,1.781,44,0
61
+ 0,105,64,41,142,41.5,0.173,22,0
62
+ 2,84,0,0,0,0,0.304,21,0
63
+ 8,133,72,0,0,32.9,0.27,39,1
64
+ 5,44,62,0,0,25,0.587,36,0
65
+ 2,141,58,34,128,25.4,0.699,24,0
66
+ 7,114,66,0,0,32.8,0.258,42,1
67
+ 5,99,74,27,0,29,0.203,32,0
68
+ 0,109,88,30,0,32.5,0.855,38,1
69
+ 2,109,92,0,0,42.7,0.845,54,0
70
+ 1,95,66,13,38,19.6,0.334,25,0
71
+ 4,146,85,27,100,28.9,0.189,27,0
72
+ 2,100,66,20,90,32.9,0.867,28,1
73
+ 5,139,64,35,140,28.6,0.411,26,0
74
+ 13,126,90,0,0,43.4,0.583,42,1
75
+ 4,129,86,20,270,35.1,0.231,23,0
76
+ 1,79,75,30,0,32,0.396,22,0
77
+ 1,0,48,20,0,24.7,0.14,22,0
78
+ 7,62,78,0,0,32.6,0.391,41,0
79
+ 5,95,72,33,0,37.7,0.37,27,0
80
+ 0,131,0,0,0,43.2,0.27,26,1
81
+ 2,112,66,22,0,25,0.307,24,0
82
+ 3,113,44,13,0,22.4,0.14,22,0
83
+ 2,74,0,0,0,0,0.102,22,0
84
+ 7,83,78,26,71,29.3,0.767,36,0
85
+ 0,101,65,28,0,24.6,0.237,22,0
86
+ 5,137,108,0,0,48.8,0.227,37,1
87
+ 2,110,74,29,125,32.4,0.698,27,0
88
+ 13,106,72,54,0,36.6,0.178,45,0
89
+ 2,100,68,25,71,38.5,0.324,26,0
90
+ 15,136,70,32,110,37.1,0.153,43,1
91
+ 1,107,68,19,0,26.5,0.165,24,0
92
+ 1,80,55,0,0,19.1,0.258,21,0
93
+ 4,123,80,15,176,32,0.443,34,0
94
+ 7,81,78,40,48,46.7,0.261,42,0
95
+ 4,134,72,0,0,23.8,0.277,60,1
96
+ 2,142,82,18,64,24.7,0.761,21,0
97
+ 6,144,72,27,228,33.9,0.255,40,0
98
+ 2,92,62,28,0,31.6,0.13,24,0
99
+ 1,71,48,18,76,20.4,0.323,22,0
100
+ 6,93,50,30,64,28.7,0.356,23,0
101
+ 1,122,90,51,220,49.7,0.325,31,1
102
+ 1,163,72,0,0,39,1.222,33,1
103
+ 1,151,60,0,0,26.1,0.179,22,0
104
+ 0,125,96,0,0,22.5,0.262,21,0
105
+ 1,81,72,18,40,26.6,0.283,24,0
106
+ 2,85,65,0,0,39.6,0.93,27,0
107
+ 1,126,56,29,152,28.7,0.801,21,0
108
+ 1,96,122,0,0,22.4,0.207,27,0
109
+ 4,144,58,28,140,29.5,0.287,37,0
110
+ 3,83,58,31,18,34.3,0.336,25,0
111
+ 0,95,85,25,36,37.4,0.247,24,1
112
+ 3,171,72,33,135,33.3,0.199,24,1
113
+ 8,155,62,26,495,34,0.543,46,1
114
+ 1,89,76,34,37,31.2,0.192,23,0
115
+ 4,76,62,0,0,34,0.391,25,0
116
+ 7,160,54,32,175,30.5,0.588,39,1
117
+ 4,146,92,0,0,31.2,0.539,61,1
118
+ 5,124,74,0,0,34,0.22,38,1
119
+ 5,78,48,0,0,33.7,0.654,25,0
120
+ 4,97,60,23,0,28.2,0.443,22,0
121
+ 4,99,76,15,51,23.2,0.223,21,0
122
+ 0,162,76,56,100,53.2,0.759,25,1
123
+ 6,111,64,39,0,34.2,0.26,24,0
124
+ 2,107,74,30,100,33.6,0.404,23,0
125
+ 5,132,80,0,0,26.8,0.186,69,0
126
+ 0,113,76,0,0,33.3,0.278,23,1
127
+ 1,88,30,42,99,55,0.496,26,1
128
+ 3,120,70,30,135,42.9,0.452,30,0
129
+ 1,118,58,36,94,33.3,0.261,23,0
130
+ 1,117,88,24,145,34.5,0.403,40,1
131
+ 0,105,84,0,0,27.9,0.741,62,1
132
+ 4,173,70,14,168,29.7,0.361,33,1
133
+ 9,122,56,0,0,33.3,1.114,33,1
134
+ 3,170,64,37,225,34.5,0.356,30,1
135
+ 8,84,74,31,0,38.3,0.457,39,0
136
+ 2,96,68,13,49,21.1,0.647,26,0
137
+ 2,125,60,20,140,33.8,0.088,31,0
138
+ 0,100,70,26,50,30.8,0.597,21,0
139
+ 0,93,60,25,92,28.7,0.532,22,0
140
+ 0,129,80,0,0,31.2,0.703,29,0
141
+ 5,105,72,29,325,36.9,0.159,28,0
142
+ 3,128,78,0,0,21.1,0.268,55,0
143
+ 5,106,82,30,0,39.5,0.286,38,0
144
+ 2,108,52,26,63,32.5,0.318,22,0
145
+ 10,108,66,0,0,32.4,0.272,42,1
146
+ 4,154,62,31,284,32.8,0.237,23,0
147
+ 0,102,75,23,0,0,0.572,21,0
148
+ 9,57,80,37,0,32.8,0.096,41,0
149
+ 2,106,64,35,119,30.5,1.4,34,0
150
+ 5,147,78,0,0,33.7,0.218,65,0
151
+ 2,90,70,17,0,27.3,0.085,22,0
152
+ 1,136,74,50,204,37.4,0.399,24,0
153
+ 4,114,65,0,0,21.9,0.432,37,0
154
+ 9,156,86,28,155,34.3,1.189,42,1
155
+ 1,153,82,42,485,40.6,0.687,23,0
156
+ 8,188,78,0,0,47.9,0.137,43,1
157
+ 7,152,88,44,0,50,0.337,36,1
158
+ 2,99,52,15,94,24.6,0.637,21,0
159
+ 1,109,56,21,135,25.2,0.833,23,0
160
+ 2,88,74,19,53,29,0.229,22,0
161
+ 17,163,72,41,114,40.9,0.817,47,1
162
+ 4,151,90,38,0,29.7,0.294,36,0
163
+ 7,102,74,40,105,37.2,0.204,45,0
164
+ 0,114,80,34,285,44.2,0.167,27,0
165
+ 2,100,64,23,0,29.7,0.368,21,0
166
+ 0,131,88,0,0,31.6,0.743,32,1
167
+ 6,104,74,18,156,29.9,0.722,41,1
168
+ 3,148,66,25,0,32.5,0.256,22,0
169
+ 4,120,68,0,0,29.6,0.709,34,0
170
+ 4,110,66,0,0,31.9,0.471,29,0
171
+ 3,111,90,12,78,28.4,0.495,29,0
172
+ 6,102,82,0,0,30.8,0.18,36,1
173
+ 6,134,70,23,130,35.4,0.542,29,1
174
+ 2,87,0,23,0,28.9,0.773,25,0
175
+ 1,79,60,42,48,43.5,0.678,23,0
176
+ 2,75,64,24,55,29.7,0.37,33,0
177
+ 8,179,72,42,130,32.7,0.719,36,1
178
+ 6,85,78,0,0,31.2,0.382,42,0
179
+ 0,129,110,46,130,67.1,0.319,26,1
180
+ 5,143,78,0,0,45,0.19,47,0
181
+ 5,130,82,0,0,39.1,0.956,37,1
182
+ 6,87,80,0,0,23.2,0.084,32,0
183
+ 0,119,64,18,92,34.9,0.725,23,0
184
+ 1,0,74,20,23,27.7,0.299,21,0
185
+ 5,73,60,0,0,26.8,0.268,27,0
186
+ 4,141,74,0,0,27.6,0.244,40,0
187
+ 7,194,68,28,0,35.9,0.745,41,1
188
+ 8,181,68,36,495,30.1,0.615,60,1
189
+ 1,128,98,41,58,32,1.321,33,1
190
+ 8,109,76,39,114,27.9,0.64,31,1
191
+ 5,139,80,35,160,31.6,0.361,25,1
192
+ 3,111,62,0,0,22.6,0.142,21,0
193
+ 9,123,70,44,94,33.1,0.374,40,0
194
+ 7,159,66,0,0,30.4,0.383,36,1
195
+ 11,135,0,0,0,52.3,0.578,40,1
196
+ 8,85,55,20,0,24.4,0.136,42,0
197
+ 5,158,84,41,210,39.4,0.395,29,1
198
+ 1,105,58,0,0,24.3,0.187,21,0
199
+ 3,107,62,13,48,22.9,0.678,23,1
200
+ 4,109,64,44,99,34.8,0.905,26,1
201
+ 4,148,60,27,318,30.9,0.15,29,1
202
+ 0,113,80,16,0,31,0.874,21,0
203
+ 1,138,82,0,0,40.1,0.236,28,0
204
+ 0,108,68,20,0,27.3,0.787,32,0
205
+ 2,99,70,16,44,20.4,0.235,27,0
206
+ 6,103,72,32,190,37.7,0.324,55,0
207
+ 5,111,72,28,0,23.9,0.407,27,0
208
+ 8,196,76,29,280,37.5,0.605,57,1
209
+ 5,162,104,0,0,37.7,0.151,52,1
210
+ 1,96,64,27,87,33.2,0.289,21,0
211
+ 7,184,84,33,0,35.5,0.355,41,1
212
+ 2,81,60,22,0,27.7,0.29,25,0
213
+ 0,147,85,54,0,42.8,0.375,24,0
214
+ 7,179,95,31,0,34.2,0.164,60,0
215
+ 0,140,65,26,130,42.6,0.431,24,1
216
+ 9,112,82,32,175,34.2,0.26,36,1
217
+ 12,151,70,40,271,41.8,0.742,38,1
218
+ 5,109,62,41,129,35.8,0.514,25,1
219
+ 6,125,68,30,120,30,0.464,32,0
220
+ 5,85,74,22,0,29,1.224,32,1
221
+ 5,112,66,0,0,37.8,0.261,41,1
222
+ 0,177,60,29,478,34.6,1.072,21,1
223
+ 2,158,90,0,0,31.6,0.805,66,1
224
+ 7,119,0,0,0,25.2,0.209,37,0
225
+ 7,142,60,33,190,28.8,0.687,61,0
226
+ 1,100,66,15,56,23.6,0.666,26,0
227
+ 1,87,78,27,32,34.6,0.101,22,0
228
+ 0,101,76,0,0,35.7,0.198,26,0
229
+ 3,162,52,38,0,37.2,0.652,24,1
230
+ 4,197,70,39,744,36.7,2.329,31,0
231
+ 0,117,80,31,53,45.2,0.089,24,0
232
+ 4,142,86,0,0,44,0.645,22,1
233
+ 6,134,80,37,370,46.2,0.238,46,1
234
+ 1,79,80,25,37,25.4,0.583,22,0
235
+ 4,122,68,0,0,35,0.394,29,0
236
+ 3,74,68,28,45,29.7,0.293,23,0
237
+ 4,171,72,0,0,43.6,0.479,26,1
238
+ 7,181,84,21,192,35.9,0.586,51,1
239
+ 0,179,90,27,0,44.1,0.686,23,1
240
+ 9,164,84,21,0,30.8,0.831,32,1
241
+ 0,104,76,0,0,18.4,0.582,27,0
242
+ 1,91,64,24,0,29.2,0.192,21,0
243
+ 4,91,70,32,88,33.1,0.446,22,0
244
+ 3,139,54,0,0,25.6,0.402,22,1
245
+ 6,119,50,22,176,27.1,1.318,33,1
246
+ 2,146,76,35,194,38.2,0.329,29,0
247
+ 9,184,85,15,0,30,1.213,49,1
248
+ 10,122,68,0,0,31.2,0.258,41,0
249
+ 0,165,90,33,680,52.3,0.427,23,0
250
+ 9,124,70,33,402,35.4,0.282,34,0
251
+ 1,111,86,19,0,30.1,0.143,23,0
252
+ 9,106,52,0,0,31.2,0.38,42,0
253
+ 2,129,84,0,0,28,0.284,27,0
254
+ 2,90,80,14,55,24.4,0.249,24,0
255
+ 0,86,68,32,0,35.8,0.238,25,0
256
+ 12,92,62,7,258,27.6,0.926,44,1
257
+ 1,113,64,35,0,33.6,0.543,21,1
258
+ 3,111,56,39,0,30.1,0.557,30,0
259
+ 2,114,68,22,0,28.7,0.092,25,0
260
+ 1,193,50,16,375,25.9,0.655,24,0
261
+ 11,155,76,28,150,33.3,1.353,51,1
262
+ 3,191,68,15,130,30.9,0.299,34,0
263
+ 3,141,0,0,0,30,0.761,27,1
264
+ 4,95,70,32,0,32.1,0.612,24,0
265
+ 3,142,80,15,0,32.4,0.2,63,0
266
+ 4,123,62,0,0,32,0.226,35,1
267
+ 5,96,74,18,67,33.6,0.997,43,0
268
+ 0,138,0,0,0,36.3,0.933,25,1
269
+ 2,128,64,42,0,40,1.101,24,0
270
+ 0,102,52,0,0,25.1,0.078,21,0
271
+ 2,146,0,0,0,27.5,0.24,28,1
272
+ 10,101,86,37,0,45.6,1.136,38,1
273
+ 2,108,62,32,56,25.2,0.128,21,0
274
+ 3,122,78,0,0,23,0.254,40,0
275
+ 1,71,78,50,45,33.2,0.422,21,0
276
+ 13,106,70,0,0,34.2,0.251,52,0
277
+ 2,100,70,52,57,40.5,0.677,25,0
278
+ 7,106,60,24,0,26.5,0.296,29,1
279
+ 0,104,64,23,116,27.8,0.454,23,0
280
+ 5,114,74,0,0,24.9,0.744,57,0
281
+ 2,108,62,10,278,25.3,0.881,22,0
282
+ 0,146,70,0,0,37.9,0.334,28,1
283
+ 10,129,76,28,122,35.9,0.28,39,0
284
+ 7,133,88,15,155,32.4,0.262,37,0
285
+ 7,161,86,0,0,30.4,0.165,47,1
286
+ 2,108,80,0,0,27,0.259,52,1
287
+ 7,136,74,26,135,26,0.647,51,0
288
+ 5,155,84,44,545,38.7,0.619,34,0
289
+ 1,119,86,39,220,45.6,0.808,29,1
290
+ 4,96,56,17,49,20.8,0.34,26,0
291
+ 5,108,72,43,75,36.1,0.263,33,0
292
+ 0,78,88,29,40,36.9,0.434,21,0
293
+ 0,107,62,30,74,36.6,0.757,25,1
294
+ 2,128,78,37,182,43.3,1.224,31,1
295
+ 1,128,48,45,194,40.5,0.613,24,1
296
+ 0,161,50,0,0,21.9,0.254,65,0
297
+ 6,151,62,31,120,35.5,0.692,28,0
298
+ 2,146,70,38,360,28,0.337,29,1
299
+ 0,126,84,29,215,30.7,0.52,24,0
300
+ 14,100,78,25,184,36.6,0.412,46,1
301
+ 8,112,72,0,0,23.6,0.84,58,0
302
+ 0,167,0,0,0,32.3,0.839,30,1
303
+ 2,144,58,33,135,31.6,0.422,25,1
304
+ 5,77,82,41,42,35.8,0.156,35,0
305
+ 5,115,98,0,0,52.9,0.209,28,1
306
+ 3,150,76,0,0,21,0.207,37,0
307
+ 2,120,76,37,105,39.7,0.215,29,0
308
+ 10,161,68,23,132,25.5,0.326,47,1
309
+ 0,137,68,14,148,24.8,0.143,21,0
310
+ 0,128,68,19,180,30.5,1.391,25,1
311
+ 2,124,68,28,205,32.9,0.875,30,1
312
+ 6,80,66,30,0,26.2,0.313,41,0
313
+ 0,106,70,37,148,39.4,0.605,22,0
314
+ 2,155,74,17,96,26.6,0.433,27,1
315
+ 3,113,50,10,85,29.5,0.626,25,0
316
+ 7,109,80,31,0,35.9,1.127,43,1
317
+ 2,112,68,22,94,34.1,0.315,26,0
318
+ 3,99,80,11,64,19.3,0.284,30,0
319
+ 3,182,74,0,0,30.5,0.345,29,1
320
+ 3,115,66,39,140,38.1,0.15,28,0
321
+ 6,194,78,0,0,23.5,0.129,59,1
322
+ 4,129,60,12,231,27.5,0.527,31,0
323
+ 3,112,74,30,0,31.6,0.197,25,1
324
+ 0,124,70,20,0,27.4,0.254,36,1
325
+ 13,152,90,33,29,26.8,0.731,43,1
326
+ 2,112,75,32,0,35.7,0.148,21,0
327
+ 1,157,72,21,168,25.6,0.123,24,0
328
+ 1,122,64,32,156,35.1,0.692,30,1
329
+ 10,179,70,0,0,35.1,0.2,37,0
330
+ 2,102,86,36,120,45.5,0.127,23,1
331
+ 6,105,70,32,68,30.8,0.122,37,0
332
+ 8,118,72,19,0,23.1,1.476,46,0
333
+ 2,87,58,16,52,32.7,0.166,25,0
334
+ 1,180,0,0,0,43.3,0.282,41,1
335
+ 12,106,80,0,0,23.6,0.137,44,0
336
+ 1,95,60,18,58,23.9,0.26,22,0
337
+ 0,165,76,43,255,47.9,0.259,26,0
338
+ 0,117,0,0,0,33.8,0.932,44,0
339
+ 5,115,76,0,0,31.2,0.343,44,1
340
+ 9,152,78,34,171,34.2,0.893,33,1
341
+ 7,178,84,0,0,39.9,0.331,41,1
342
+ 1,130,70,13,105,25.9,0.472,22,0
343
+ 1,95,74,21,73,25.9,0.673,36,0
344
+ 1,0,68,35,0,32,0.389,22,0
345
+ 5,122,86,0,0,34.7,0.29,33,0
346
+ 8,95,72,0,0,36.8,0.485,57,0
347
+ 8,126,88,36,108,38.5,0.349,49,0
348
+ 1,139,46,19,83,28.7,0.654,22,0
349
+ 3,116,0,0,0,23.5,0.187,23,0
350
+ 3,99,62,19,74,21.8,0.279,26,0
351
+ 5,0,80,32,0,41,0.346,37,1
352
+ 4,92,80,0,0,42.2,0.237,29,0
353
+ 4,137,84,0,0,31.2,0.252,30,0
354
+ 3,61,82,28,0,34.4,0.243,46,0
355
+ 1,90,62,12,43,27.2,0.58,24,0
356
+ 3,90,78,0,0,42.7,0.559,21,0
357
+ 9,165,88,0,0,30.4,0.302,49,1
358
+ 1,125,50,40,167,33.3,0.962,28,1
359
+ 13,129,0,30,0,39.9,0.569,44,1
360
+ 12,88,74,40,54,35.3,0.378,48,0
361
+ 1,196,76,36,249,36.5,0.875,29,1
362
+ 5,189,64,33,325,31.2,0.583,29,1
363
+ 5,158,70,0,0,29.8,0.207,63,0
364
+ 5,103,108,37,0,39.2,0.305,65,0
365
+ 4,146,78,0,0,38.5,0.52,67,1
366
+ 4,147,74,25,293,34.9,0.385,30,0
367
+ 5,99,54,28,83,34,0.499,30,0
368
+ 6,124,72,0,0,27.6,0.368,29,1
369
+ 0,101,64,17,0,21,0.252,21,0
370
+ 3,81,86,16,66,27.5,0.306,22,0
371
+ 1,133,102,28,140,32.8,0.234,45,1
372
+ 3,173,82,48,465,38.4,2.137,25,1
373
+ 0,118,64,23,89,0,1.731,21,0
374
+ 0,84,64,22,66,35.8,0.545,21,0
375
+ 2,105,58,40,94,34.9,0.225,25,0
376
+ 2,122,52,43,158,36.2,0.816,28,0
377
+ 12,140,82,43,325,39.2,0.528,58,1
378
+ 0,98,82,15,84,25.2,0.299,22,0
379
+ 1,87,60,37,75,37.2,0.509,22,0
380
+ 4,156,75,0,0,48.3,0.238,32,1
381
+ 0,93,100,39,72,43.4,1.021,35,0
382
+ 1,107,72,30,82,30.8,0.821,24,0
383
+ 0,105,68,22,0,20,0.236,22,0
384
+ 1,109,60,8,182,25.4,0.947,21,0
385
+ 1,90,62,18,59,25.1,1.268,25,0
386
+ 1,125,70,24,110,24.3,0.221,25,0
387
+ 1,119,54,13,50,22.3,0.205,24,0
388
+ 5,116,74,29,0,32.3,0.66,35,1
389
+ 8,105,100,36,0,43.3,0.239,45,1
390
+ 5,144,82,26,285,32,0.452,58,1
391
+ 3,100,68,23,81,31.6,0.949,28,0
392
+ 1,100,66,29,196,32,0.444,42,0
393
+ 5,166,76,0,0,45.7,0.34,27,1
394
+ 1,131,64,14,415,23.7,0.389,21,0
395
+ 4,116,72,12,87,22.1,0.463,37,0
396
+ 4,158,78,0,0,32.9,0.803,31,1
397
+ 2,127,58,24,275,27.7,1.6,25,0
398
+ 3,96,56,34,115,24.7,0.944,39,0
399
+ 0,131,66,40,0,34.3,0.196,22,1
400
+ 3,82,70,0,0,21.1,0.389,25,0
401
+ 3,193,70,31,0,34.9,0.241,25,1
402
+ 4,95,64,0,0,32,0.161,31,1
403
+ 6,137,61,0,0,24.2,0.151,55,0
404
+ 5,136,84,41,88,35,0.286,35,1
405
+ 9,72,78,25,0,31.6,0.28,38,0
406
+ 5,168,64,0,0,32.9,0.135,41,1
407
+ 2,123,48,32,165,42.1,0.52,26,0
408
+ 4,115,72,0,0,28.9,0.376,46,1
409
+ 0,101,62,0,0,21.9,0.336,25,0
410
+ 8,197,74,0,0,25.9,1.191,39,1
411
+ 1,172,68,49,579,42.4,0.702,28,1
412
+ 6,102,90,39,0,35.7,0.674,28,0
413
+ 1,112,72,30,176,34.4,0.528,25,0
414
+ 1,143,84,23,310,42.4,1.076,22,0
415
+ 1,143,74,22,61,26.2,0.256,21,0
416
+ 0,138,60,35,167,34.6,0.534,21,1
417
+ 3,173,84,33,474,35.7,0.258,22,1
418
+ 1,97,68,21,0,27.2,1.095,22,0
419
+ 4,144,82,32,0,38.5,0.554,37,1
420
+ 1,83,68,0,0,18.2,0.624,27,0
421
+ 3,129,64,29,115,26.4,0.219,28,1
422
+ 1,119,88,41,170,45.3,0.507,26,0
423
+ 2,94,68,18,76,26,0.561,21,0
424
+ 0,102,64,46,78,40.6,0.496,21,0
425
+ 2,115,64,22,0,30.8,0.421,21,0
426
+ 8,151,78,32,210,42.9,0.516,36,1
427
+ 4,184,78,39,277,37,0.264,31,1
428
+ 0,94,0,0,0,0,0.256,25,0
429
+ 1,181,64,30,180,34.1,0.328,38,1
430
+ 0,135,94,46,145,40.6,0.284,26,0
431
+ 1,95,82,25,180,35,0.233,43,1
432
+ 2,99,0,0,0,22.2,0.108,23,0
433
+ 3,89,74,16,85,30.4,0.551,38,0
434
+ 1,80,74,11,60,30,0.527,22,0
435
+ 2,139,75,0,0,25.6,0.167,29,0
436
+ 1,90,68,8,0,24.5,1.138,36,0
437
+ 0,141,0,0,0,42.4,0.205,29,1
438
+ 12,140,85,33,0,37.4,0.244,41,0
439
+ 5,147,75,0,0,29.9,0.434,28,0
440
+ 1,97,70,15,0,18.2,0.147,21,0
441
+ 6,107,88,0,0,36.8,0.727,31,0
442
+ 0,189,104,25,0,34.3,0.435,41,1
443
+ 2,83,66,23,50,32.2,0.497,22,0
444
+ 4,117,64,27,120,33.2,0.23,24,0
445
+ 8,108,70,0,0,30.5,0.955,33,1
446
+ 4,117,62,12,0,29.7,0.38,30,1
447
+ 0,180,78,63,14,59.4,2.42,25,1
448
+ 1,100,72,12,70,25.3,0.658,28,0
449
+ 0,95,80,45,92,36.5,0.33,26,0
450
+ 0,104,64,37,64,33.6,0.51,22,1
451
+ 0,120,74,18,63,30.5,0.285,26,0
452
+ 1,82,64,13,95,21.2,0.415,23,0
453
+ 2,134,70,0,0,28.9,0.542,23,1
454
+ 0,91,68,32,210,39.9,0.381,25,0
455
+ 2,119,0,0,0,19.6,0.832,72,0
456
+ 2,100,54,28,105,37.8,0.498,24,0
457
+ 14,175,62,30,0,33.6,0.212,38,1
458
+ 1,135,54,0,0,26.7,0.687,62,0
459
+ 5,86,68,28,71,30.2,0.364,24,0
460
+ 10,148,84,48,237,37.6,1.001,51,1
461
+ 9,134,74,33,60,25.9,0.46,81,0
462
+ 9,120,72,22,56,20.8,0.733,48,0
463
+ 1,71,62,0,0,21.8,0.416,26,0
464
+ 8,74,70,40,49,35.3,0.705,39,0
465
+ 5,88,78,30,0,27.6,0.258,37,0
466
+ 10,115,98,0,0,24,1.022,34,0
467
+ 0,124,56,13,105,21.8,0.452,21,0
468
+ 0,74,52,10,36,27.8,0.269,22,0
469
+ 0,97,64,36,100,36.8,0.6,25,0
470
+ 8,120,0,0,0,30,0.183,38,1
471
+ 6,154,78,41,140,46.1,0.571,27,0
472
+ 1,144,82,40,0,41.3,0.607,28,0
473
+ 0,137,70,38,0,33.2,0.17,22,0
474
+ 0,119,66,27,0,38.8,0.259,22,0
475
+ 7,136,90,0,0,29.9,0.21,50,0
476
+ 4,114,64,0,0,28.9,0.126,24,0
477
+ 0,137,84,27,0,27.3,0.231,59,0
478
+ 2,105,80,45,191,33.7,0.711,29,1
479
+ 7,114,76,17,110,23.8,0.466,31,0
480
+ 8,126,74,38,75,25.9,0.162,39,0
481
+ 4,132,86,31,0,28,0.419,63,0
482
+ 3,158,70,30,328,35.5,0.344,35,1
483
+ 0,123,88,37,0,35.2,0.197,29,0
484
+ 4,85,58,22,49,27.8,0.306,28,0
485
+ 0,84,82,31,125,38.2,0.233,23,0
486
+ 0,145,0,0,0,44.2,0.63,31,1
487
+ 0,135,68,42,250,42.3,0.365,24,1
488
+ 1,139,62,41,480,40.7,0.536,21,0
489
+ 0,173,78,32,265,46.5,1.159,58,0
490
+ 4,99,72,17,0,25.6,0.294,28,0
491
+ 8,194,80,0,0,26.1,0.551,67,0
492
+ 2,83,65,28,66,36.8,0.629,24,0
493
+ 2,89,90,30,0,33.5,0.292,42,0
494
+ 4,99,68,38,0,32.8,0.145,33,0
495
+ 4,125,70,18,122,28.9,1.144,45,1
496
+ 3,80,0,0,0,0,0.174,22,0
497
+ 6,166,74,0,0,26.6,0.304,66,0
498
+ 5,110,68,0,0,26,0.292,30,0
499
+ 2,81,72,15,76,30.1,0.547,25,0
500
+ 7,195,70,33,145,25.1,0.163,55,1
501
+ 6,154,74,32,193,29.3,0.839,39,0
502
+ 2,117,90,19,71,25.2,0.313,21,0
503
+ 3,84,72,32,0,37.2,0.267,28,0
504
+ 6,0,68,41,0,39,0.727,41,1
505
+ 7,94,64,25,79,33.3,0.738,41,0
506
+ 3,96,78,39,0,37.3,0.238,40,0
507
+ 10,75,82,0,0,33.3,0.263,38,0
508
+ 0,180,90,26,90,36.5,0.314,35,1
509
+ 1,130,60,23,170,28.6,0.692,21,0
510
+ 2,84,50,23,76,30.4,0.968,21,0
511
+ 8,120,78,0,0,25,0.409,64,0
512
+ 12,84,72,31,0,29.7,0.297,46,1
513
+ 0,139,62,17,210,22.1,0.207,21,0
514
+ 9,91,68,0,0,24.2,0.2,58,0
515
+ 2,91,62,0,0,27.3,0.525,22,0
516
+ 3,99,54,19,86,25.6,0.154,24,0
517
+ 3,163,70,18,105,31.6,0.268,28,1
518
+ 9,145,88,34,165,30.3,0.771,53,1
519
+ 7,125,86,0,0,37.6,0.304,51,0
520
+ 13,76,60,0,0,32.8,0.18,41,0
521
+ 6,129,90,7,326,19.6,0.582,60,0
522
+ 2,68,70,32,66,25,0.187,25,0
523
+ 3,124,80,33,130,33.2,0.305,26,0
524
+ 6,114,0,0,0,0,0.189,26,0
525
+ 9,130,70,0,0,34.2,0.652,45,1
526
+ 3,125,58,0,0,31.6,0.151,24,0
527
+ 3,87,60,18,0,21.8,0.444,21,0
528
+ 1,97,64,19,82,18.2,0.299,21,0
529
+ 3,116,74,15,105,26.3,0.107,24,0
530
+ 0,117,66,31,188,30.8,0.493,22,0
531
+ 0,111,65,0,0,24.6,0.66,31,0
532
+ 2,122,60,18,106,29.8,0.717,22,0
533
+ 0,107,76,0,0,45.3,0.686,24,0
534
+ 1,86,66,52,65,41.3,0.917,29,0
535
+ 6,91,0,0,0,29.8,0.501,31,0
536
+ 1,77,56,30,56,33.3,1.251,24,0
537
+ 4,132,0,0,0,32.9,0.302,23,1
538
+ 0,105,90,0,0,29.6,0.197,46,0
539
+ 0,57,60,0,0,21.7,0.735,67,0
540
+ 0,127,80,37,210,36.3,0.804,23,0
541
+ 3,129,92,49,155,36.4,0.968,32,1
542
+ 8,100,74,40,215,39.4,0.661,43,1
543
+ 3,128,72,25,190,32.4,0.549,27,1
544
+ 10,90,85,32,0,34.9,0.825,56,1
545
+ 4,84,90,23,56,39.5,0.159,25,0
546
+ 1,88,78,29,76,32,0.365,29,0
547
+ 8,186,90,35,225,34.5,0.423,37,1
548
+ 5,187,76,27,207,43.6,1.034,53,1
549
+ 4,131,68,21,166,33.1,0.16,28,0
550
+ 1,164,82,43,67,32.8,0.341,50,0
551
+ 4,189,110,31,0,28.5,0.68,37,0
552
+ 1,116,70,28,0,27.4,0.204,21,0
553
+ 3,84,68,30,106,31.9,0.591,25,0
554
+ 6,114,88,0,0,27.8,0.247,66,0
555
+ 1,88,62,24,44,29.9,0.422,23,0
556
+ 1,84,64,23,115,36.9,0.471,28,0
557
+ 7,124,70,33,215,25.5,0.161,37,0
558
+ 1,97,70,40,0,38.1,0.218,30,0
559
+ 8,110,76,0,0,27.8,0.237,58,0
560
+ 11,103,68,40,0,46.2,0.126,42,0
561
+ 11,85,74,0,0,30.1,0.3,35,0
562
+ 6,125,76,0,0,33.8,0.121,54,1
563
+ 0,198,66,32,274,41.3,0.502,28,1
564
+ 1,87,68,34,77,37.6,0.401,24,0
565
+ 6,99,60,19,54,26.9,0.497,32,0
566
+ 0,91,80,0,0,32.4,0.601,27,0
567
+ 2,95,54,14,88,26.1,0.748,22,0
568
+ 1,99,72,30,18,38.6,0.412,21,0
569
+ 6,92,62,32,126,32,0.085,46,0
570
+ 4,154,72,29,126,31.3,0.338,37,0
571
+ 0,121,66,30,165,34.3,0.203,33,1
572
+ 3,78,70,0,0,32.5,0.27,39,0
573
+ 2,130,96,0,0,22.6,0.268,21,0
574
+ 3,111,58,31,44,29.5,0.43,22,0
575
+ 2,98,60,17,120,34.7,0.198,22,0
576
+ 1,143,86,30,330,30.1,0.892,23,0
577
+ 1,119,44,47,63,35.5,0.28,25,0
578
+ 6,108,44,20,130,24,0.813,35,0
579
+ 2,118,80,0,0,42.9,0.693,21,1
580
+ 10,133,68,0,0,27,0.245,36,0
581
+ 2,197,70,99,0,34.7,0.575,62,1
582
+ 0,151,90,46,0,42.1,0.371,21,1
583
+ 6,109,60,27,0,25,0.206,27,0
584
+ 12,121,78,17,0,26.5,0.259,62,0
585
+ 8,100,76,0,0,38.7,0.19,42,0
586
+ 8,124,76,24,600,28.7,0.687,52,1
587
+ 1,93,56,11,0,22.5,0.417,22,0
588
+ 8,143,66,0,0,34.9,0.129,41,1
589
+ 6,103,66,0,0,24.3,0.249,29,0
590
+ 3,176,86,27,156,33.3,1.154,52,1
591
+ 0,73,0,0,0,21.1,0.342,25,0
592
+ 11,111,84,40,0,46.8,0.925,45,1
593
+ 2,112,78,50,140,39.4,0.175,24,0
594
+ 3,132,80,0,0,34.4,0.402,44,1
595
+ 2,82,52,22,115,28.5,1.699,25,0
596
+ 6,123,72,45,230,33.6,0.733,34,0
597
+ 0,188,82,14,185,32,0.682,22,1
598
+ 0,67,76,0,0,45.3,0.194,46,0
599
+ 1,89,24,19,25,27.8,0.559,21,0
600
+ 1,173,74,0,0,36.8,0.088,38,1
601
+ 1,109,38,18,120,23.1,0.407,26,0
602
+ 1,108,88,19,0,27.1,0.4,24,0
603
+ 6,96,0,0,0,23.7,0.19,28,0
604
+ 1,124,74,36,0,27.8,0.1,30,0
605
+ 7,150,78,29,126,35.2,0.692,54,1
606
+ 4,183,0,0,0,28.4,0.212,36,1
607
+ 1,124,60,32,0,35.8,0.514,21,0
608
+ 1,181,78,42,293,40,1.258,22,1
609
+ 1,92,62,25,41,19.5,0.482,25,0
610
+ 0,152,82,39,272,41.5,0.27,27,0
611
+ 1,111,62,13,182,24,0.138,23,0
612
+ 3,106,54,21,158,30.9,0.292,24,0
613
+ 3,174,58,22,194,32.9,0.593,36,1
614
+ 7,168,88,42,321,38.2,0.787,40,1
615
+ 6,105,80,28,0,32.5,0.878,26,0
616
+ 11,138,74,26,144,36.1,0.557,50,1
617
+ 3,106,72,0,0,25.8,0.207,27,0
618
+ 6,117,96,0,0,28.7,0.157,30,0
619
+ 2,68,62,13,15,20.1,0.257,23,0
620
+ 9,112,82,24,0,28.2,1.282,50,1
621
+ 0,119,0,0,0,32.4,0.141,24,1
622
+ 2,112,86,42,160,38.4,0.246,28,0
623
+ 2,92,76,20,0,24.2,1.698,28,0
624
+ 6,183,94,0,0,40.8,1.461,45,0
625
+ 0,94,70,27,115,43.5,0.347,21,0
626
+ 2,108,64,0,0,30.8,0.158,21,0
627
+ 4,90,88,47,54,37.7,0.362,29,0
628
+ 0,125,68,0,0,24.7,0.206,21,0
629
+ 0,132,78,0,0,32.4,0.393,21,0
630
+ 5,128,80,0,0,34.6,0.144,45,0
631
+ 4,94,65,22,0,24.7,0.148,21,0
632
+ 7,114,64,0,0,27.4,0.732,34,1
633
+ 0,102,78,40,90,34.5,0.238,24,0
634
+ 2,111,60,0,0,26.2,0.343,23,0
635
+ 1,128,82,17,183,27.5,0.115,22,0
636
+ 10,92,62,0,0,25.9,0.167,31,0
637
+ 13,104,72,0,0,31.2,0.465,38,1
638
+ 5,104,74,0,0,28.8,0.153,48,0
639
+ 2,94,76,18,66,31.6,0.649,23,0
640
+ 7,97,76,32,91,40.9,0.871,32,1
641
+ 1,100,74,12,46,19.5,0.149,28,0
642
+ 0,102,86,17,105,29.3,0.695,27,0
643
+ 4,128,70,0,0,34.3,0.303,24,0
644
+ 6,147,80,0,0,29.5,0.178,50,1
645
+ 4,90,0,0,0,28,0.61,31,0
646
+ 3,103,72,30,152,27.6,0.73,27,0
647
+ 2,157,74,35,440,39.4,0.134,30,0
648
+ 1,167,74,17,144,23.4,0.447,33,1
649
+ 0,179,50,36,159,37.8,0.455,22,1
650
+ 11,136,84,35,130,28.3,0.26,42,1
651
+ 0,107,60,25,0,26.4,0.133,23,0
652
+ 1,91,54,25,100,25.2,0.234,23,0
653
+ 1,117,60,23,106,33.8,0.466,27,0
654
+ 5,123,74,40,77,34.1,0.269,28,0
655
+ 2,120,54,0,0,26.8,0.455,27,0
656
+ 1,106,70,28,135,34.2,0.142,22,0
657
+ 2,155,52,27,540,38.7,0.24,25,1
658
+ 2,101,58,35,90,21.8,0.155,22,0
659
+ 1,120,80,48,200,38.9,1.162,41,0
660
+ 11,127,106,0,0,39,0.19,51,0
661
+ 3,80,82,31,70,34.2,1.292,27,1
662
+ 10,162,84,0,0,27.7,0.182,54,0
663
+ 1,199,76,43,0,42.9,1.394,22,1
664
+ 8,167,106,46,231,37.6,0.165,43,1
665
+ 9,145,80,46,130,37.9,0.637,40,1
666
+ 6,115,60,39,0,33.7,0.245,40,1
667
+ 1,112,80,45,132,34.8,0.217,24,0
668
+ 4,145,82,18,0,32.5,0.235,70,1
669
+ 10,111,70,27,0,27.5,0.141,40,1
670
+ 6,98,58,33,190,34,0.43,43,0
671
+ 9,154,78,30,100,30.9,0.164,45,0
672
+ 6,165,68,26,168,33.6,0.631,49,0
673
+ 1,99,58,10,0,25.4,0.551,21,0
674
+ 10,68,106,23,49,35.5,0.285,47,0
675
+ 3,123,100,35,240,57.3,0.88,22,0
676
+ 8,91,82,0,0,35.6,0.587,68,0
677
+ 6,195,70,0,0,30.9,0.328,31,1
678
+ 9,156,86,0,0,24.8,0.23,53,1
679
+ 0,93,60,0,0,35.3,0.263,25,0
680
+ 3,121,52,0,0,36,0.127,25,1
681
+ 2,101,58,17,265,24.2,0.614,23,0
682
+ 2,56,56,28,45,24.2,0.332,22,0
683
+ 0,162,76,36,0,49.6,0.364,26,1
684
+ 0,95,64,39,105,44.6,0.366,22,0
685
+ 4,125,80,0,0,32.3,0.536,27,1
686
+ 5,136,82,0,0,0,0.64,69,0
687
+ 2,129,74,26,205,33.2,0.591,25,0
688
+ 3,130,64,0,0,23.1,0.314,22,0
689
+ 1,107,50,19,0,28.3,0.181,29,0
690
+ 1,140,74,26,180,24.1,0.828,23,0
691
+ 1,144,82,46,180,46.1,0.335,46,1
692
+ 8,107,80,0,0,24.6,0.856,34,0
693
+ 13,158,114,0,0,42.3,0.257,44,1
694
+ 2,121,70,32,95,39.1,0.886,23,0
695
+ 7,129,68,49,125,38.5,0.439,43,1
696
+ 2,90,60,0,0,23.5,0.191,25,0
697
+ 7,142,90,24,480,30.4,0.128,43,1
698
+ 3,169,74,19,125,29.9,0.268,31,1
699
+ 0,99,0,0,0,25,0.253,22,0
700
+ 4,127,88,11,155,34.5,0.598,28,0
701
+ 4,118,70,0,0,44.5,0.904,26,0
702
+ 2,122,76,27,200,35.9,0.483,26,0
703
+ 6,125,78,31,0,27.6,0.565,49,1
704
+ 1,168,88,29,0,35,0.905,52,1
705
+ 2,129,0,0,0,38.5,0.304,41,0
706
+ 4,110,76,20,100,28.4,0.118,27,0
707
+ 6,80,80,36,0,39.8,0.177,28,0
708
+ 10,115,0,0,0,0,0.261,30,1
709
+ 2,127,46,21,335,34.4,0.176,22,0
710
+ 9,164,78,0,0,32.8,0.148,45,1
711
+ 2,93,64,32,160,38,0.674,23,1
712
+ 3,158,64,13,387,31.2,0.295,24,0
713
+ 5,126,78,27,22,29.6,0.439,40,0
714
+ 10,129,62,36,0,41.2,0.441,38,1
715
+ 0,134,58,20,291,26.4,0.352,21,0
716
+ 3,102,74,0,0,29.5,0.121,32,0
717
+ 7,187,50,33,392,33.9,0.826,34,1
718
+ 3,173,78,39,185,33.8,0.97,31,1
719
+ 10,94,72,18,0,23.1,0.595,56,0
720
+ 1,108,60,46,178,35.5,0.415,24,0
721
+ 5,97,76,27,0,35.6,0.378,52,1
722
+ 4,83,86,19,0,29.3,0.317,34,0
723
+ 1,114,66,36,200,38.1,0.289,21,0
724
+ 1,149,68,29,127,29.3,0.349,42,1
725
+ 5,117,86,30,105,39.1,0.251,42,0
726
+ 1,111,94,0,0,32.8,0.265,45,0
727
+ 4,112,78,40,0,39.4,0.236,38,0
728
+ 1,116,78,29,180,36.1,0.496,25,0
729
+ 0,141,84,26,0,32.4,0.433,22,0
730
+ 2,175,88,0,0,22.9,0.326,22,0
731
+ 2,92,52,0,0,30.1,0.141,22,0
732
+ 3,130,78,23,79,28.4,0.323,34,1
733
+ 8,120,86,0,0,28.4,0.259,22,1
734
+ 2,174,88,37,120,44.5,0.646,24,1
735
+ 2,106,56,27,165,29,0.426,22,0
736
+ 2,105,75,0,0,23.3,0.56,53,0
737
+ 4,95,60,32,0,35.4,0.284,28,0
738
+ 0,126,86,27,120,27.4,0.515,21,0
739
+ 8,65,72,23,0,32,0.6,42,0
740
+ 2,99,60,17,160,36.6,0.453,21,0
741
+ 1,102,74,0,0,39.5,0.293,42,1
742
+ 11,120,80,37,150,42.3,0.785,48,1
743
+ 3,102,44,20,94,30.8,0.4,26,0
744
+ 1,109,58,18,116,28.5,0.219,22,0
745
+ 9,140,94,0,0,32.7,0.734,45,1
746
+ 13,153,88,37,140,40.6,1.174,39,0
747
+ 12,100,84,33,105,30,0.488,46,0
748
+ 1,147,94,41,0,49.3,0.358,27,1
749
+ 1,81,74,41,57,46.3,1.096,32,0
750
+ 3,187,70,22,200,36.4,0.408,36,1
751
+ 6,162,62,0,0,24.3,0.178,50,1
752
+ 4,136,70,0,0,31.2,1.182,22,1
753
+ 1,121,78,39,74,39,0.261,28,0
754
+ 3,108,62,24,0,26,0.223,25,0
755
+ 0,181,88,44,510,43.3,0.222,26,1
756
+ 8,154,78,32,0,32.4,0.443,45,1
757
+ 1,128,88,39,110,36.5,1.057,37,1
758
+ 7,137,90,41,0,32,0.391,39,0
759
+ 0,123,72,0,0,36.3,0.258,52,1
760
+ 1,106,76,0,0,37.5,0.197,26,0
761
+ 6,190,92,0,0,35.5,0.278,66,1
762
+ 2,88,58,26,16,28.4,0.766,22,0
763
+ 9,170,74,31,0,44,0.403,43,1
764
+ 9,89,62,0,0,22.5,0.142,33,0
765
+ 10,101,76,48,180,32.9,0.171,63,0
766
+ 2,122,70,27,0,36.8,0.34,27,0
767
+ 5,121,72,23,112,26.2,0.245,30,0
768
+ 1,126,60,0,0,30.1,0.349,47,1
769
+ 1,93,70,31,0,30.4,0.315,23,0
data/preprocessed_data.csv ADDED
@@ -0,0 +1,769 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Pregnancies,Glucose,BloodPressure,SkinThickness,Insulin,BMI,DiabetesPedigreeFunction,Age,Outcome
2
+ 6,148.0,72.0,35.0,155.5482233502538,33.6,0.627,50,1
3
+ 1,85.0,66.0,29.0,155.5482233502538,26.6,0.351,31,0
4
+ 8,183.0,64.0,29.153419593345657,155.5482233502538,23.3,0.672,32,1
5
+ 1,89.0,66.0,23.0,94.0,28.1,0.167,21,0
6
+ 0,137.0,40.0,35.0,168.0,43.1,2.288,33,1
7
+ 5,116.0,74.0,29.153419593345657,155.5482233502538,25.6,0.201,30,0
8
+ 3,78.0,50.0,32.0,88.0,31.0,0.248,26,1
9
+ 10,115.0,72.40518417462484,29.153419593345657,155.5482233502538,35.3,0.134,29,0
10
+ 2,197.0,70.0,45.0,543.0,30.5,0.158,53,1
11
+ 8,125.0,96.0,29.153419593345657,155.5482233502538,32.457463672391015,0.232,54,1
12
+ 4,110.0,92.0,29.153419593345657,155.5482233502538,37.6,0.191,30,0
13
+ 10,168.0,74.0,29.153419593345657,155.5482233502538,38.0,0.537,34,1
14
+ 10,139.0,80.0,29.153419593345657,155.5482233502538,27.1,1.441,57,0
15
+ 1,189.0,60.0,23.0,846.0,30.1,0.398,59,1
16
+ 5,166.0,72.0,19.0,175.0,25.8,0.587,51,1
17
+ 7,100.0,72.40518417462484,29.153419593345657,155.5482233502538,30.0,0.484,32,1
18
+ 0,118.0,84.0,47.0,230.0,45.8,0.551,31,1
19
+ 7,107.0,74.0,29.153419593345657,155.5482233502538,29.6,0.254,31,1
20
+ 1,103.0,30.0,38.0,83.0,43.3,0.183,33,0
21
+ 1,115.0,70.0,30.0,96.0,34.6,0.529,32,1
22
+ 3,126.0,88.0,41.0,235.0,39.3,0.704,27,0
23
+ 8,99.0,84.0,29.153419593345657,155.5482233502538,35.4,0.388,50,0
24
+ 7,196.0,90.0,29.153419593345657,155.5482233502538,39.8,0.451,41,1
25
+ 9,119.0,80.0,35.0,155.5482233502538,29.0,0.263,29,1
26
+ 11,143.0,94.0,33.0,146.0,36.6,0.254,51,1
27
+ 10,125.0,70.0,26.0,115.0,31.1,0.205,41,1
28
+ 7,147.0,76.0,29.153419593345657,155.5482233502538,39.4,0.257,43,1
29
+ 1,97.0,66.0,15.0,140.0,23.2,0.487,22,0
30
+ 13,145.0,82.0,19.0,110.0,22.2,0.245,57,0
31
+ 5,117.0,92.0,29.153419593345657,155.5482233502538,34.1,0.337,38,0
32
+ 5,109.0,75.0,26.0,155.5482233502538,36.0,0.546,60,0
33
+ 3,158.0,76.0,36.0,245.0,31.6,0.851,28,1
34
+ 3,88.0,58.0,11.0,54.0,24.8,0.267,22,0
35
+ 6,92.0,92.0,29.153419593345657,155.5482233502538,19.9,0.188,28,0
36
+ 10,122.0,78.0,31.0,155.5482233502538,27.6,0.512,45,0
37
+ 4,103.0,60.0,33.0,192.0,24.0,0.966,33,0
38
+ 11,138.0,76.0,29.153419593345657,155.5482233502538,33.2,0.42,35,0
39
+ 9,102.0,76.0,37.0,155.5482233502538,32.9,0.665,46,1
40
+ 2,90.0,68.0,42.0,155.5482233502538,38.2,0.503,27,1
41
+ 4,111.0,72.0,47.0,207.0,37.1,1.39,56,1
42
+ 3,180.0,64.0,25.0,70.0,34.0,0.271,26,0
43
+ 7,133.0,84.0,29.153419593345657,155.5482233502538,40.2,0.696,37,0
44
+ 7,106.0,92.0,18.0,155.5482233502538,22.7,0.235,48,0
45
+ 9,171.0,110.0,24.0,240.0,45.4,0.721,54,1
46
+ 7,159.0,64.0,29.153419593345657,155.5482233502538,27.4,0.294,40,0
47
+ 0,180.0,66.0,39.0,155.5482233502538,42.0,1.893,25,1
48
+ 1,146.0,56.0,29.153419593345657,155.5482233502538,29.7,0.564,29,0
49
+ 2,71.0,70.0,27.0,155.5482233502538,28.0,0.586,22,0
50
+ 7,103.0,66.0,32.0,155.5482233502538,39.1,0.344,31,1
51
+ 7,105.0,72.40518417462484,29.153419593345657,155.5482233502538,32.457463672391015,0.305,24,0
52
+ 1,103.0,80.0,11.0,82.0,19.4,0.491,22,0
53
+ 1,101.0,50.0,15.0,36.0,24.2,0.526,26,0
54
+ 5,88.0,66.0,21.0,23.0,24.4,0.342,30,0
55
+ 8,176.0,90.0,34.0,300.0,33.7,0.467,58,1
56
+ 7,150.0,66.0,42.0,342.0,34.7,0.718,42,0
57
+ 1,73.0,50.0,10.0,155.5482233502538,23.0,0.248,21,0
58
+ 7,187.0,68.0,39.0,304.0,37.7,0.254,41,1
59
+ 0,100.0,88.0,60.0,110.0,46.8,0.962,31,0
60
+ 0,146.0,82.0,29.153419593345657,155.5482233502538,40.5,1.781,44,0
61
+ 0,105.0,64.0,41.0,142.0,41.5,0.173,22,0
62
+ 2,84.0,72.40518417462484,29.153419593345657,155.5482233502538,32.457463672391015,0.304,21,0
63
+ 8,133.0,72.0,29.153419593345657,155.5482233502538,32.9,0.27,39,1
64
+ 5,44.0,62.0,29.153419593345657,155.5482233502538,25.0,0.587,36,0
65
+ 2,141.0,58.0,34.0,128.0,25.4,0.699,24,0
66
+ 7,114.0,66.0,29.153419593345657,155.5482233502538,32.8,0.258,42,1
67
+ 5,99.0,74.0,27.0,155.5482233502538,29.0,0.203,32,0
68
+ 0,109.0,88.0,30.0,155.5482233502538,32.5,0.855,38,1
69
+ 2,109.0,92.0,29.153419593345657,155.5482233502538,42.7,0.845,54,0
70
+ 1,95.0,66.0,13.0,38.0,19.6,0.334,25,0
71
+ 4,146.0,85.0,27.0,100.0,28.9,0.189,27,0
72
+ 2,100.0,66.0,20.0,90.0,32.9,0.867,28,1
73
+ 5,139.0,64.0,35.0,140.0,28.6,0.411,26,0
74
+ 13,126.0,90.0,29.153419593345657,155.5482233502538,43.4,0.583,42,1
75
+ 4,129.0,86.0,20.0,270.0,35.1,0.231,23,0
76
+ 1,79.0,75.0,30.0,155.5482233502538,32.0,0.396,22,0
77
+ 1,121.6867627785059,48.0,20.0,155.5482233502538,24.7,0.14,22,0
78
+ 7,62.0,78.0,29.153419593345657,155.5482233502538,32.6,0.391,41,0
79
+ 5,95.0,72.0,33.0,155.5482233502538,37.7,0.37,27,0
80
+ 0,131.0,72.40518417462484,29.153419593345657,155.5482233502538,43.2,0.27,26,1
81
+ 2,112.0,66.0,22.0,155.5482233502538,25.0,0.307,24,0
82
+ 3,113.0,44.0,13.0,155.5482233502538,22.4,0.14,22,0
83
+ 2,74.0,72.40518417462484,29.153419593345657,155.5482233502538,32.457463672391015,0.102,22,0
84
+ 7,83.0,78.0,26.0,71.0,29.3,0.767,36,0
85
+ 0,101.0,65.0,28.0,155.5482233502538,24.6,0.237,22,0
86
+ 5,137.0,108.0,29.153419593345657,155.5482233502538,48.8,0.227,37,1
87
+ 2,110.0,74.0,29.0,125.0,32.4,0.698,27,0
88
+ 13,106.0,72.0,54.0,155.5482233502538,36.6,0.178,45,0
89
+ 2,100.0,68.0,25.0,71.0,38.5,0.324,26,0
90
+ 15,136.0,70.0,32.0,110.0,37.1,0.153,43,1
91
+ 1,107.0,68.0,19.0,155.5482233502538,26.5,0.165,24,0
92
+ 1,80.0,55.0,29.153419593345657,155.5482233502538,19.1,0.258,21,0
93
+ 4,123.0,80.0,15.0,176.0,32.0,0.443,34,0
94
+ 7,81.0,78.0,40.0,48.0,46.7,0.261,42,0
95
+ 4,134.0,72.0,29.153419593345657,155.5482233502538,23.8,0.277,60,1
96
+ 2,142.0,82.0,18.0,64.0,24.7,0.761,21,0
97
+ 6,144.0,72.0,27.0,228.0,33.9,0.255,40,0
98
+ 2,92.0,62.0,28.0,155.5482233502538,31.6,0.13,24,0
99
+ 1,71.0,48.0,18.0,76.0,20.4,0.323,22,0
100
+ 6,93.0,50.0,30.0,64.0,28.7,0.356,23,0
101
+ 1,122.0,90.0,51.0,220.0,49.7,0.325,31,1
102
+ 1,163.0,72.0,29.153419593345657,155.5482233502538,39.0,1.222,33,1
103
+ 1,151.0,60.0,29.153419593345657,155.5482233502538,26.1,0.179,22,0
104
+ 0,125.0,96.0,29.153419593345657,155.5482233502538,22.5,0.262,21,0
105
+ 1,81.0,72.0,18.0,40.0,26.6,0.283,24,0
106
+ 2,85.0,65.0,29.153419593345657,155.5482233502538,39.6,0.93,27,0
107
+ 1,126.0,56.0,29.0,152.0,28.7,0.801,21,0
108
+ 1,96.0,122.0,29.153419593345657,155.5482233502538,22.4,0.207,27,0
109
+ 4,144.0,58.0,28.0,140.0,29.5,0.287,37,0
110
+ 3,83.0,58.0,31.0,18.0,34.3,0.336,25,0
111
+ 0,95.0,85.0,25.0,36.0,37.4,0.247,24,1
112
+ 3,171.0,72.0,33.0,135.0,33.3,0.199,24,1
113
+ 8,155.0,62.0,26.0,495.0,34.0,0.543,46,1
114
+ 1,89.0,76.0,34.0,37.0,31.2,0.192,23,0
115
+ 4,76.0,62.0,29.153419593345657,155.5482233502538,34.0,0.391,25,0
116
+ 7,160.0,54.0,32.0,175.0,30.5,0.588,39,1
117
+ 4,146.0,92.0,29.153419593345657,155.5482233502538,31.2,0.539,61,1
118
+ 5,124.0,74.0,29.153419593345657,155.5482233502538,34.0,0.22,38,1
119
+ 5,78.0,48.0,29.153419593345657,155.5482233502538,33.7,0.654,25,0
120
+ 4,97.0,60.0,23.0,155.5482233502538,28.2,0.443,22,0
121
+ 4,99.0,76.0,15.0,51.0,23.2,0.223,21,0
122
+ 0,162.0,76.0,56.0,100.0,53.2,0.759,25,1
123
+ 6,111.0,64.0,39.0,155.5482233502538,34.2,0.26,24,0
124
+ 2,107.0,74.0,30.0,100.0,33.6,0.404,23,0
125
+ 5,132.0,80.0,29.153419593345657,155.5482233502538,26.8,0.186,69,0
126
+ 0,113.0,76.0,29.153419593345657,155.5482233502538,33.3,0.278,23,1
127
+ 1,88.0,30.0,42.0,99.0,55.0,0.496,26,1
128
+ 3,120.0,70.0,30.0,135.0,42.9,0.452,30,0
129
+ 1,118.0,58.0,36.0,94.0,33.3,0.261,23,0
130
+ 1,117.0,88.0,24.0,145.0,34.5,0.403,40,1
131
+ 0,105.0,84.0,29.153419593345657,155.5482233502538,27.9,0.741,62,1
132
+ 4,173.0,70.0,14.0,168.0,29.7,0.361,33,1
133
+ 9,122.0,56.0,29.153419593345657,155.5482233502538,33.3,1.114,33,1
134
+ 3,170.0,64.0,37.0,225.0,34.5,0.356,30,1
135
+ 8,84.0,74.0,31.0,155.5482233502538,38.3,0.457,39,0
136
+ 2,96.0,68.0,13.0,49.0,21.1,0.647,26,0
137
+ 2,125.0,60.0,20.0,140.0,33.8,0.088,31,0
138
+ 0,100.0,70.0,26.0,50.0,30.8,0.597,21,0
139
+ 0,93.0,60.0,25.0,92.0,28.7,0.532,22,0
140
+ 0,129.0,80.0,29.153419593345657,155.5482233502538,31.2,0.703,29,0
141
+ 5,105.0,72.0,29.0,325.0,36.9,0.159,28,0
142
+ 3,128.0,78.0,29.153419593345657,155.5482233502538,21.1,0.268,55,0
143
+ 5,106.0,82.0,30.0,155.5482233502538,39.5,0.286,38,0
144
+ 2,108.0,52.0,26.0,63.0,32.5,0.318,22,0
145
+ 10,108.0,66.0,29.153419593345657,155.5482233502538,32.4,0.272,42,1
146
+ 4,154.0,62.0,31.0,284.0,32.8,0.237,23,0
147
+ 0,102.0,75.0,23.0,155.5482233502538,32.457463672391015,0.572,21,0
148
+ 9,57.0,80.0,37.0,155.5482233502538,32.8,0.096,41,0
149
+ 2,106.0,64.0,35.0,119.0,30.5,1.4,34,0
150
+ 5,147.0,78.0,29.153419593345657,155.5482233502538,33.7,0.218,65,0
151
+ 2,90.0,70.0,17.0,155.5482233502538,27.3,0.085,22,0
152
+ 1,136.0,74.0,50.0,204.0,37.4,0.399,24,0
153
+ 4,114.0,65.0,29.153419593345657,155.5482233502538,21.9,0.432,37,0
154
+ 9,156.0,86.0,28.0,155.0,34.3,1.189,42,1
155
+ 1,153.0,82.0,42.0,485.0,40.6,0.687,23,0
156
+ 8,188.0,78.0,29.153419593345657,155.5482233502538,47.9,0.137,43,1
157
+ 7,152.0,88.0,44.0,155.5482233502538,50.0,0.337,36,1
158
+ 2,99.0,52.0,15.0,94.0,24.6,0.637,21,0
159
+ 1,109.0,56.0,21.0,135.0,25.2,0.833,23,0
160
+ 2,88.0,74.0,19.0,53.0,29.0,0.229,22,0
161
+ 17,163.0,72.0,41.0,114.0,40.9,0.817,47,1
162
+ 4,151.0,90.0,38.0,155.5482233502538,29.7,0.294,36,0
163
+ 7,102.0,74.0,40.0,105.0,37.2,0.204,45,0
164
+ 0,114.0,80.0,34.0,285.0,44.2,0.167,27,0
165
+ 2,100.0,64.0,23.0,155.5482233502538,29.7,0.368,21,0
166
+ 0,131.0,88.0,29.153419593345657,155.5482233502538,31.6,0.743,32,1
167
+ 6,104.0,74.0,18.0,156.0,29.9,0.722,41,1
168
+ 3,148.0,66.0,25.0,155.5482233502538,32.5,0.256,22,0
169
+ 4,120.0,68.0,29.153419593345657,155.5482233502538,29.6,0.709,34,0
170
+ 4,110.0,66.0,29.153419593345657,155.5482233502538,31.9,0.471,29,0
171
+ 3,111.0,90.0,12.0,78.0,28.4,0.495,29,0
172
+ 6,102.0,82.0,29.153419593345657,155.5482233502538,30.8,0.18,36,1
173
+ 6,134.0,70.0,23.0,130.0,35.4,0.542,29,1
174
+ 2,87.0,72.40518417462484,23.0,155.5482233502538,28.9,0.773,25,0
175
+ 1,79.0,60.0,42.0,48.0,43.5,0.678,23,0
176
+ 2,75.0,64.0,24.0,55.0,29.7,0.37,33,0
177
+ 8,179.0,72.0,42.0,130.0,32.7,0.719,36,1
178
+ 6,85.0,78.0,29.153419593345657,155.5482233502538,31.2,0.382,42,0
179
+ 0,129.0,110.0,46.0,130.0,67.1,0.319,26,1
180
+ 5,143.0,78.0,29.153419593345657,155.5482233502538,45.0,0.19,47,0
181
+ 5,130.0,82.0,29.153419593345657,155.5482233502538,39.1,0.956,37,1
182
+ 6,87.0,80.0,29.153419593345657,155.5482233502538,23.2,0.084,32,0
183
+ 0,119.0,64.0,18.0,92.0,34.9,0.725,23,0
184
+ 1,121.6867627785059,74.0,20.0,23.0,27.7,0.299,21,0
185
+ 5,73.0,60.0,29.153419593345657,155.5482233502538,26.8,0.268,27,0
186
+ 4,141.0,74.0,29.153419593345657,155.5482233502538,27.6,0.244,40,0
187
+ 7,194.0,68.0,28.0,155.5482233502538,35.9,0.745,41,1
188
+ 8,181.0,68.0,36.0,495.0,30.1,0.615,60,1
189
+ 1,128.0,98.0,41.0,58.0,32.0,1.321,33,1
190
+ 8,109.0,76.0,39.0,114.0,27.9,0.64,31,1
191
+ 5,139.0,80.0,35.0,160.0,31.6,0.361,25,1
192
+ 3,111.0,62.0,29.153419593345657,155.5482233502538,22.6,0.142,21,0
193
+ 9,123.0,70.0,44.0,94.0,33.1,0.374,40,0
194
+ 7,159.0,66.0,29.153419593345657,155.5482233502538,30.4,0.383,36,1
195
+ 11,135.0,72.40518417462484,29.153419593345657,155.5482233502538,52.3,0.578,40,1
196
+ 8,85.0,55.0,20.0,155.5482233502538,24.4,0.136,42,0
197
+ 5,158.0,84.0,41.0,210.0,39.4,0.395,29,1
198
+ 1,105.0,58.0,29.153419593345657,155.5482233502538,24.3,0.187,21,0
199
+ 3,107.0,62.0,13.0,48.0,22.9,0.678,23,1
200
+ 4,109.0,64.0,44.0,99.0,34.8,0.905,26,1
201
+ 4,148.0,60.0,27.0,318.0,30.9,0.15,29,1
202
+ 0,113.0,80.0,16.0,155.5482233502538,31.0,0.874,21,0
203
+ 1,138.0,82.0,29.153419593345657,155.5482233502538,40.1,0.236,28,0
204
+ 0,108.0,68.0,20.0,155.5482233502538,27.3,0.787,32,0
205
+ 2,99.0,70.0,16.0,44.0,20.4,0.235,27,0
206
+ 6,103.0,72.0,32.0,190.0,37.7,0.324,55,0
207
+ 5,111.0,72.0,28.0,155.5482233502538,23.9,0.407,27,0
208
+ 8,196.0,76.0,29.0,280.0,37.5,0.605,57,1
209
+ 5,162.0,104.0,29.153419593345657,155.5482233502538,37.7,0.151,52,1
210
+ 1,96.0,64.0,27.0,87.0,33.2,0.289,21,0
211
+ 7,184.0,84.0,33.0,155.5482233502538,35.5,0.355,41,1
212
+ 2,81.0,60.0,22.0,155.5482233502538,27.7,0.29,25,0
213
+ 0,147.0,85.0,54.0,155.5482233502538,42.8,0.375,24,0
214
+ 7,179.0,95.0,31.0,155.5482233502538,34.2,0.164,60,0
215
+ 0,140.0,65.0,26.0,130.0,42.6,0.431,24,1
216
+ 9,112.0,82.0,32.0,175.0,34.2,0.26,36,1
217
+ 12,151.0,70.0,40.0,271.0,41.8,0.742,38,1
218
+ 5,109.0,62.0,41.0,129.0,35.8,0.514,25,1
219
+ 6,125.0,68.0,30.0,120.0,30.0,0.464,32,0
220
+ 5,85.0,74.0,22.0,155.5482233502538,29.0,1.224,32,1
221
+ 5,112.0,66.0,29.153419593345657,155.5482233502538,37.8,0.261,41,1
222
+ 0,177.0,60.0,29.0,478.0,34.6,1.072,21,1
223
+ 2,158.0,90.0,29.153419593345657,155.5482233502538,31.6,0.805,66,1
224
+ 7,119.0,72.40518417462484,29.153419593345657,155.5482233502538,25.2,0.209,37,0
225
+ 7,142.0,60.0,33.0,190.0,28.8,0.687,61,0
226
+ 1,100.0,66.0,15.0,56.0,23.6,0.666,26,0
227
+ 1,87.0,78.0,27.0,32.0,34.6,0.101,22,0
228
+ 0,101.0,76.0,29.153419593345657,155.5482233502538,35.7,0.198,26,0
229
+ 3,162.0,52.0,38.0,155.5482233502538,37.2,0.652,24,1
230
+ 4,197.0,70.0,39.0,744.0,36.7,2.329,31,0
231
+ 0,117.0,80.0,31.0,53.0,45.2,0.089,24,0
232
+ 4,142.0,86.0,29.153419593345657,155.5482233502538,44.0,0.645,22,1
233
+ 6,134.0,80.0,37.0,370.0,46.2,0.238,46,1
234
+ 1,79.0,80.0,25.0,37.0,25.4,0.583,22,0
235
+ 4,122.0,68.0,29.153419593345657,155.5482233502538,35.0,0.394,29,0
236
+ 3,74.0,68.0,28.0,45.0,29.7,0.293,23,0
237
+ 4,171.0,72.0,29.153419593345657,155.5482233502538,43.6,0.479,26,1
238
+ 7,181.0,84.0,21.0,192.0,35.9,0.586,51,1
239
+ 0,179.0,90.0,27.0,155.5482233502538,44.1,0.686,23,1
240
+ 9,164.0,84.0,21.0,155.5482233502538,30.8,0.831,32,1
241
+ 0,104.0,76.0,29.153419593345657,155.5482233502538,18.4,0.582,27,0
242
+ 1,91.0,64.0,24.0,155.5482233502538,29.2,0.192,21,0
243
+ 4,91.0,70.0,32.0,88.0,33.1,0.446,22,0
244
+ 3,139.0,54.0,29.153419593345657,155.5482233502538,25.6,0.402,22,1
245
+ 6,119.0,50.0,22.0,176.0,27.1,1.318,33,1
246
+ 2,146.0,76.0,35.0,194.0,38.2,0.329,29,0
247
+ 9,184.0,85.0,15.0,155.5482233502538,30.0,1.213,49,1
248
+ 10,122.0,68.0,29.153419593345657,155.5482233502538,31.2,0.258,41,0
249
+ 0,165.0,90.0,33.0,680.0,52.3,0.427,23,0
250
+ 9,124.0,70.0,33.0,402.0,35.4,0.282,34,0
251
+ 1,111.0,86.0,19.0,155.5482233502538,30.1,0.143,23,0
252
+ 9,106.0,52.0,29.153419593345657,155.5482233502538,31.2,0.38,42,0
253
+ 2,129.0,84.0,29.153419593345657,155.5482233502538,28.0,0.284,27,0
254
+ 2,90.0,80.0,14.0,55.0,24.4,0.249,24,0
255
+ 0,86.0,68.0,32.0,155.5482233502538,35.8,0.238,25,0
256
+ 12,92.0,62.0,7.0,258.0,27.6,0.926,44,1
257
+ 1,113.0,64.0,35.0,155.5482233502538,33.6,0.543,21,1
258
+ 3,111.0,56.0,39.0,155.5482233502538,30.1,0.557,30,0
259
+ 2,114.0,68.0,22.0,155.5482233502538,28.7,0.092,25,0
260
+ 1,193.0,50.0,16.0,375.0,25.9,0.655,24,0
261
+ 11,155.0,76.0,28.0,150.0,33.3,1.353,51,1
262
+ 3,191.0,68.0,15.0,130.0,30.9,0.299,34,0
263
+ 3,141.0,72.40518417462484,29.153419593345657,155.5482233502538,30.0,0.761,27,1
264
+ 4,95.0,70.0,32.0,155.5482233502538,32.1,0.612,24,0
265
+ 3,142.0,80.0,15.0,155.5482233502538,32.4,0.2,63,0
266
+ 4,123.0,62.0,29.153419593345657,155.5482233502538,32.0,0.226,35,1
267
+ 5,96.0,74.0,18.0,67.0,33.6,0.997,43,0
268
+ 0,138.0,72.40518417462484,29.153419593345657,155.5482233502538,36.3,0.933,25,1
269
+ 2,128.0,64.0,42.0,155.5482233502538,40.0,1.101,24,0
270
+ 0,102.0,52.0,29.153419593345657,155.5482233502538,25.1,0.078,21,0
271
+ 2,146.0,72.40518417462484,29.153419593345657,155.5482233502538,27.5,0.24,28,1
272
+ 10,101.0,86.0,37.0,155.5482233502538,45.6,1.136,38,1
273
+ 2,108.0,62.0,32.0,56.0,25.2,0.128,21,0
274
+ 3,122.0,78.0,29.153419593345657,155.5482233502538,23.0,0.254,40,0
275
+ 1,71.0,78.0,50.0,45.0,33.2,0.422,21,0
276
+ 13,106.0,70.0,29.153419593345657,155.5482233502538,34.2,0.251,52,0
277
+ 2,100.0,70.0,52.0,57.0,40.5,0.677,25,0
278
+ 7,106.0,60.0,24.0,155.5482233502538,26.5,0.296,29,1
279
+ 0,104.0,64.0,23.0,116.0,27.8,0.454,23,0
280
+ 5,114.0,74.0,29.153419593345657,155.5482233502538,24.9,0.744,57,0
281
+ 2,108.0,62.0,10.0,278.0,25.3,0.881,22,0
282
+ 0,146.0,70.0,29.153419593345657,155.5482233502538,37.9,0.334,28,1
283
+ 10,129.0,76.0,28.0,122.0,35.9,0.28,39,0
284
+ 7,133.0,88.0,15.0,155.0,32.4,0.262,37,0
285
+ 7,161.0,86.0,29.153419593345657,155.5482233502538,30.4,0.165,47,1
286
+ 2,108.0,80.0,29.153419593345657,155.5482233502538,27.0,0.259,52,1
287
+ 7,136.0,74.0,26.0,135.0,26.0,0.647,51,0
288
+ 5,155.0,84.0,44.0,545.0,38.7,0.619,34,0
289
+ 1,119.0,86.0,39.0,220.0,45.6,0.808,29,1
290
+ 4,96.0,56.0,17.0,49.0,20.8,0.34,26,0
291
+ 5,108.0,72.0,43.0,75.0,36.1,0.263,33,0
292
+ 0,78.0,88.0,29.0,40.0,36.9,0.434,21,0
293
+ 0,107.0,62.0,30.0,74.0,36.6,0.757,25,1
294
+ 2,128.0,78.0,37.0,182.0,43.3,1.224,31,1
295
+ 1,128.0,48.0,45.0,194.0,40.5,0.613,24,1
296
+ 0,161.0,50.0,29.153419593345657,155.5482233502538,21.9,0.254,65,0
297
+ 6,151.0,62.0,31.0,120.0,35.5,0.692,28,0
298
+ 2,146.0,70.0,38.0,360.0,28.0,0.337,29,1
299
+ 0,126.0,84.0,29.0,215.0,30.7,0.52,24,0
300
+ 14,100.0,78.0,25.0,184.0,36.6,0.412,46,1
301
+ 8,112.0,72.0,29.153419593345657,155.5482233502538,23.6,0.84,58,0
302
+ 0,167.0,72.40518417462484,29.153419593345657,155.5482233502538,32.3,0.839,30,1
303
+ 2,144.0,58.0,33.0,135.0,31.6,0.422,25,1
304
+ 5,77.0,82.0,41.0,42.0,35.8,0.156,35,0
305
+ 5,115.0,98.0,29.153419593345657,155.5482233502538,52.9,0.209,28,1
306
+ 3,150.0,76.0,29.153419593345657,155.5482233502538,21.0,0.207,37,0
307
+ 2,120.0,76.0,37.0,105.0,39.7,0.215,29,0
308
+ 10,161.0,68.0,23.0,132.0,25.5,0.326,47,1
309
+ 0,137.0,68.0,14.0,148.0,24.8,0.143,21,0
310
+ 0,128.0,68.0,19.0,180.0,30.5,1.391,25,1
311
+ 2,124.0,68.0,28.0,205.0,32.9,0.875,30,1
312
+ 6,80.0,66.0,30.0,155.5482233502538,26.2,0.313,41,0
313
+ 0,106.0,70.0,37.0,148.0,39.4,0.605,22,0
314
+ 2,155.0,74.0,17.0,96.0,26.6,0.433,27,1
315
+ 3,113.0,50.0,10.0,85.0,29.5,0.626,25,0
316
+ 7,109.0,80.0,31.0,155.5482233502538,35.9,1.127,43,1
317
+ 2,112.0,68.0,22.0,94.0,34.1,0.315,26,0
318
+ 3,99.0,80.0,11.0,64.0,19.3,0.284,30,0
319
+ 3,182.0,74.0,29.153419593345657,155.5482233502538,30.5,0.345,29,1
320
+ 3,115.0,66.0,39.0,140.0,38.1,0.15,28,0
321
+ 6,194.0,78.0,29.153419593345657,155.5482233502538,23.5,0.129,59,1
322
+ 4,129.0,60.0,12.0,231.0,27.5,0.527,31,0
323
+ 3,112.0,74.0,30.0,155.5482233502538,31.6,0.197,25,1
324
+ 0,124.0,70.0,20.0,155.5482233502538,27.4,0.254,36,1
325
+ 13,152.0,90.0,33.0,29.0,26.8,0.731,43,1
326
+ 2,112.0,75.0,32.0,155.5482233502538,35.7,0.148,21,0
327
+ 1,157.0,72.0,21.0,168.0,25.6,0.123,24,0
328
+ 1,122.0,64.0,32.0,156.0,35.1,0.692,30,1
329
+ 10,179.0,70.0,29.153419593345657,155.5482233502538,35.1,0.2,37,0
330
+ 2,102.0,86.0,36.0,120.0,45.5,0.127,23,1
331
+ 6,105.0,70.0,32.0,68.0,30.8,0.122,37,0
332
+ 8,118.0,72.0,19.0,155.5482233502538,23.1,1.476,46,0
333
+ 2,87.0,58.0,16.0,52.0,32.7,0.166,25,0
334
+ 1,180.0,72.40518417462484,29.153419593345657,155.5482233502538,43.3,0.282,41,1
335
+ 12,106.0,80.0,29.153419593345657,155.5482233502538,23.6,0.137,44,0
336
+ 1,95.0,60.0,18.0,58.0,23.9,0.26,22,0
337
+ 0,165.0,76.0,43.0,255.0,47.9,0.259,26,0
338
+ 0,117.0,72.40518417462484,29.153419593345657,155.5482233502538,33.8,0.932,44,0
339
+ 5,115.0,76.0,29.153419593345657,155.5482233502538,31.2,0.343,44,1
340
+ 9,152.0,78.0,34.0,171.0,34.2,0.893,33,1
341
+ 7,178.0,84.0,29.153419593345657,155.5482233502538,39.9,0.331,41,1
342
+ 1,130.0,70.0,13.0,105.0,25.9,0.472,22,0
343
+ 1,95.0,74.0,21.0,73.0,25.9,0.673,36,0
344
+ 1,121.6867627785059,68.0,35.0,155.5482233502538,32.0,0.389,22,0
345
+ 5,122.0,86.0,29.153419593345657,155.5482233502538,34.7,0.29,33,0
346
+ 8,95.0,72.0,29.153419593345657,155.5482233502538,36.8,0.485,57,0
347
+ 8,126.0,88.0,36.0,108.0,38.5,0.349,49,0
348
+ 1,139.0,46.0,19.0,83.0,28.7,0.654,22,0
349
+ 3,116.0,72.40518417462484,29.153419593345657,155.5482233502538,23.5,0.187,23,0
350
+ 3,99.0,62.0,19.0,74.0,21.8,0.279,26,0
351
+ 5,121.6867627785059,80.0,32.0,155.5482233502538,41.0,0.346,37,1
352
+ 4,92.0,80.0,29.153419593345657,155.5482233502538,42.2,0.237,29,0
353
+ 4,137.0,84.0,29.153419593345657,155.5482233502538,31.2,0.252,30,0
354
+ 3,61.0,82.0,28.0,155.5482233502538,34.4,0.243,46,0
355
+ 1,90.0,62.0,12.0,43.0,27.2,0.58,24,0
356
+ 3,90.0,78.0,29.153419593345657,155.5482233502538,42.7,0.559,21,0
357
+ 9,165.0,88.0,29.153419593345657,155.5482233502538,30.4,0.302,49,1
358
+ 1,125.0,50.0,40.0,167.0,33.3,0.962,28,1
359
+ 13,129.0,72.40518417462484,30.0,155.5482233502538,39.9,0.569,44,1
360
+ 12,88.0,74.0,40.0,54.0,35.3,0.378,48,0
361
+ 1,196.0,76.0,36.0,249.0,36.5,0.875,29,1
362
+ 5,189.0,64.0,33.0,325.0,31.2,0.583,29,1
363
+ 5,158.0,70.0,29.153419593345657,155.5482233502538,29.8,0.207,63,0
364
+ 5,103.0,108.0,37.0,155.5482233502538,39.2,0.305,65,0
365
+ 4,146.0,78.0,29.153419593345657,155.5482233502538,38.5,0.52,67,1
366
+ 4,147.0,74.0,25.0,293.0,34.9,0.385,30,0
367
+ 5,99.0,54.0,28.0,83.0,34.0,0.499,30,0
368
+ 6,124.0,72.0,29.153419593345657,155.5482233502538,27.6,0.368,29,1
369
+ 0,101.0,64.0,17.0,155.5482233502538,21.0,0.252,21,0
370
+ 3,81.0,86.0,16.0,66.0,27.5,0.306,22,0
371
+ 1,133.0,102.0,28.0,140.0,32.8,0.234,45,1
372
+ 3,173.0,82.0,48.0,465.0,38.4,2.137,25,1
373
+ 0,118.0,64.0,23.0,89.0,32.457463672391015,1.731,21,0
374
+ 0,84.0,64.0,22.0,66.0,35.8,0.545,21,0
375
+ 2,105.0,58.0,40.0,94.0,34.9,0.225,25,0
376
+ 2,122.0,52.0,43.0,158.0,36.2,0.816,28,0
377
+ 12,140.0,82.0,43.0,325.0,39.2,0.528,58,1
378
+ 0,98.0,82.0,15.0,84.0,25.2,0.299,22,0
379
+ 1,87.0,60.0,37.0,75.0,37.2,0.509,22,0
380
+ 4,156.0,75.0,29.153419593345657,155.5482233502538,48.3,0.238,32,1
381
+ 0,93.0,100.0,39.0,72.0,43.4,1.021,35,0
382
+ 1,107.0,72.0,30.0,82.0,30.8,0.821,24,0
383
+ 0,105.0,68.0,22.0,155.5482233502538,20.0,0.236,22,0
384
+ 1,109.0,60.0,8.0,182.0,25.4,0.947,21,0
385
+ 1,90.0,62.0,18.0,59.0,25.1,1.268,25,0
386
+ 1,125.0,70.0,24.0,110.0,24.3,0.221,25,0
387
+ 1,119.0,54.0,13.0,50.0,22.3,0.205,24,0
388
+ 5,116.0,74.0,29.0,155.5482233502538,32.3,0.66,35,1
389
+ 8,105.0,100.0,36.0,155.5482233502538,43.3,0.239,45,1
390
+ 5,144.0,82.0,26.0,285.0,32.0,0.452,58,1
391
+ 3,100.0,68.0,23.0,81.0,31.6,0.949,28,0
392
+ 1,100.0,66.0,29.0,196.0,32.0,0.444,42,0
393
+ 5,166.0,76.0,29.153419593345657,155.5482233502538,45.7,0.34,27,1
394
+ 1,131.0,64.0,14.0,415.0,23.7,0.389,21,0
395
+ 4,116.0,72.0,12.0,87.0,22.1,0.463,37,0
396
+ 4,158.0,78.0,29.153419593345657,155.5482233502538,32.9,0.803,31,1
397
+ 2,127.0,58.0,24.0,275.0,27.7,1.6,25,0
398
+ 3,96.0,56.0,34.0,115.0,24.7,0.944,39,0
399
+ 0,131.0,66.0,40.0,155.5482233502538,34.3,0.196,22,1
400
+ 3,82.0,70.0,29.153419593345657,155.5482233502538,21.1,0.389,25,0
401
+ 3,193.0,70.0,31.0,155.5482233502538,34.9,0.241,25,1
402
+ 4,95.0,64.0,29.153419593345657,155.5482233502538,32.0,0.161,31,1
403
+ 6,137.0,61.0,29.153419593345657,155.5482233502538,24.2,0.151,55,0
404
+ 5,136.0,84.0,41.0,88.0,35.0,0.286,35,1
405
+ 9,72.0,78.0,25.0,155.5482233502538,31.6,0.28,38,0
406
+ 5,168.0,64.0,29.153419593345657,155.5482233502538,32.9,0.135,41,1
407
+ 2,123.0,48.0,32.0,165.0,42.1,0.52,26,0
408
+ 4,115.0,72.0,29.153419593345657,155.5482233502538,28.9,0.376,46,1
409
+ 0,101.0,62.0,29.153419593345657,155.5482233502538,21.9,0.336,25,0
410
+ 8,197.0,74.0,29.153419593345657,155.5482233502538,25.9,1.191,39,1
411
+ 1,172.0,68.0,49.0,579.0,42.4,0.702,28,1
412
+ 6,102.0,90.0,39.0,155.5482233502538,35.7,0.674,28,0
413
+ 1,112.0,72.0,30.0,176.0,34.4,0.528,25,0
414
+ 1,143.0,84.0,23.0,310.0,42.4,1.076,22,0
415
+ 1,143.0,74.0,22.0,61.0,26.2,0.256,21,0
416
+ 0,138.0,60.0,35.0,167.0,34.6,0.534,21,1
417
+ 3,173.0,84.0,33.0,474.0,35.7,0.258,22,1
418
+ 1,97.0,68.0,21.0,155.5482233502538,27.2,1.095,22,0
419
+ 4,144.0,82.0,32.0,155.5482233502538,38.5,0.554,37,1
420
+ 1,83.0,68.0,29.153419593345657,155.5482233502538,18.2,0.624,27,0
421
+ 3,129.0,64.0,29.0,115.0,26.4,0.219,28,1
422
+ 1,119.0,88.0,41.0,170.0,45.3,0.507,26,0
423
+ 2,94.0,68.0,18.0,76.0,26.0,0.561,21,0
424
+ 0,102.0,64.0,46.0,78.0,40.6,0.496,21,0
425
+ 2,115.0,64.0,22.0,155.5482233502538,30.8,0.421,21,0
426
+ 8,151.0,78.0,32.0,210.0,42.9,0.516,36,1
427
+ 4,184.0,78.0,39.0,277.0,37.0,0.264,31,1
428
+ 0,94.0,72.40518417462484,29.153419593345657,155.5482233502538,32.457463672391015,0.256,25,0
429
+ 1,181.0,64.0,30.0,180.0,34.1,0.328,38,1
430
+ 0,135.0,94.0,46.0,145.0,40.6,0.284,26,0
431
+ 1,95.0,82.0,25.0,180.0,35.0,0.233,43,1
432
+ 2,99.0,72.40518417462484,29.153419593345657,155.5482233502538,22.2,0.108,23,0
433
+ 3,89.0,74.0,16.0,85.0,30.4,0.551,38,0
434
+ 1,80.0,74.0,11.0,60.0,30.0,0.527,22,0
435
+ 2,139.0,75.0,29.153419593345657,155.5482233502538,25.6,0.167,29,0
436
+ 1,90.0,68.0,8.0,155.5482233502538,24.5,1.138,36,0
437
+ 0,141.0,72.40518417462484,29.153419593345657,155.5482233502538,42.4,0.205,29,1
438
+ 12,140.0,85.0,33.0,155.5482233502538,37.4,0.244,41,0
439
+ 5,147.0,75.0,29.153419593345657,155.5482233502538,29.9,0.434,28,0
440
+ 1,97.0,70.0,15.0,155.5482233502538,18.2,0.147,21,0
441
+ 6,107.0,88.0,29.153419593345657,155.5482233502538,36.8,0.727,31,0
442
+ 0,189.0,104.0,25.0,155.5482233502538,34.3,0.435,41,1
443
+ 2,83.0,66.0,23.0,50.0,32.2,0.497,22,0
444
+ 4,117.0,64.0,27.0,120.0,33.2,0.23,24,0
445
+ 8,108.0,70.0,29.153419593345657,155.5482233502538,30.5,0.955,33,1
446
+ 4,117.0,62.0,12.0,155.5482233502538,29.7,0.38,30,1
447
+ 0,180.0,78.0,63.0,14.0,59.4,2.42,25,1
448
+ 1,100.0,72.0,12.0,70.0,25.3,0.658,28,0
449
+ 0,95.0,80.0,45.0,92.0,36.5,0.33,26,0
450
+ 0,104.0,64.0,37.0,64.0,33.6,0.51,22,1
451
+ 0,120.0,74.0,18.0,63.0,30.5,0.285,26,0
452
+ 1,82.0,64.0,13.0,95.0,21.2,0.415,23,0
453
+ 2,134.0,70.0,29.153419593345657,155.5482233502538,28.9,0.542,23,1
454
+ 0,91.0,68.0,32.0,210.0,39.9,0.381,25,0
455
+ 2,119.0,72.40518417462484,29.153419593345657,155.5482233502538,19.6,0.832,72,0
456
+ 2,100.0,54.0,28.0,105.0,37.8,0.498,24,0
457
+ 14,175.0,62.0,30.0,155.5482233502538,33.6,0.212,38,1
458
+ 1,135.0,54.0,29.153419593345657,155.5482233502538,26.7,0.687,62,0
459
+ 5,86.0,68.0,28.0,71.0,30.2,0.364,24,0
460
+ 10,148.0,84.0,48.0,237.0,37.6,1.001,51,1
461
+ 9,134.0,74.0,33.0,60.0,25.9,0.46,81,0
462
+ 9,120.0,72.0,22.0,56.0,20.8,0.733,48,0
463
+ 1,71.0,62.0,29.153419593345657,155.5482233502538,21.8,0.416,26,0
464
+ 8,74.0,70.0,40.0,49.0,35.3,0.705,39,0
465
+ 5,88.0,78.0,30.0,155.5482233502538,27.6,0.258,37,0
466
+ 10,115.0,98.0,29.153419593345657,155.5482233502538,24.0,1.022,34,0
467
+ 0,124.0,56.0,13.0,105.0,21.8,0.452,21,0
468
+ 0,74.0,52.0,10.0,36.0,27.8,0.269,22,0
469
+ 0,97.0,64.0,36.0,100.0,36.8,0.6,25,0
470
+ 8,120.0,72.40518417462484,29.153419593345657,155.5482233502538,30.0,0.183,38,1
471
+ 6,154.0,78.0,41.0,140.0,46.1,0.571,27,0
472
+ 1,144.0,82.0,40.0,155.5482233502538,41.3,0.607,28,0
473
+ 0,137.0,70.0,38.0,155.5482233502538,33.2,0.17,22,0
474
+ 0,119.0,66.0,27.0,155.5482233502538,38.8,0.259,22,0
475
+ 7,136.0,90.0,29.153419593345657,155.5482233502538,29.9,0.21,50,0
476
+ 4,114.0,64.0,29.153419593345657,155.5482233502538,28.9,0.126,24,0
477
+ 0,137.0,84.0,27.0,155.5482233502538,27.3,0.231,59,0
478
+ 2,105.0,80.0,45.0,191.0,33.7,0.711,29,1
479
+ 7,114.0,76.0,17.0,110.0,23.8,0.466,31,0
480
+ 8,126.0,74.0,38.0,75.0,25.9,0.162,39,0
481
+ 4,132.0,86.0,31.0,155.5482233502538,28.0,0.419,63,0
482
+ 3,158.0,70.0,30.0,328.0,35.5,0.344,35,1
483
+ 0,123.0,88.0,37.0,155.5482233502538,35.2,0.197,29,0
484
+ 4,85.0,58.0,22.0,49.0,27.8,0.306,28,0
485
+ 0,84.0,82.0,31.0,125.0,38.2,0.233,23,0
486
+ 0,145.0,72.40518417462484,29.153419593345657,155.5482233502538,44.2,0.63,31,1
487
+ 0,135.0,68.0,42.0,250.0,42.3,0.365,24,1
488
+ 1,139.0,62.0,41.0,480.0,40.7,0.536,21,0
489
+ 0,173.0,78.0,32.0,265.0,46.5,1.159,58,0
490
+ 4,99.0,72.0,17.0,155.5482233502538,25.6,0.294,28,0
491
+ 8,194.0,80.0,29.153419593345657,155.5482233502538,26.1,0.551,67,0
492
+ 2,83.0,65.0,28.0,66.0,36.8,0.629,24,0
493
+ 2,89.0,90.0,30.0,155.5482233502538,33.5,0.292,42,0
494
+ 4,99.0,68.0,38.0,155.5482233502538,32.8,0.145,33,0
495
+ 4,125.0,70.0,18.0,122.0,28.9,1.144,45,1
496
+ 3,80.0,72.40518417462484,29.153419593345657,155.5482233502538,32.457463672391015,0.174,22,0
497
+ 6,166.0,74.0,29.153419593345657,155.5482233502538,26.6,0.304,66,0
498
+ 5,110.0,68.0,29.153419593345657,155.5482233502538,26.0,0.292,30,0
499
+ 2,81.0,72.0,15.0,76.0,30.1,0.547,25,0
500
+ 7,195.0,70.0,33.0,145.0,25.1,0.163,55,1
501
+ 6,154.0,74.0,32.0,193.0,29.3,0.839,39,0
502
+ 2,117.0,90.0,19.0,71.0,25.2,0.313,21,0
503
+ 3,84.0,72.0,32.0,155.5482233502538,37.2,0.267,28,0
504
+ 6,121.6867627785059,68.0,41.0,155.5482233502538,39.0,0.727,41,1
505
+ 7,94.0,64.0,25.0,79.0,33.3,0.738,41,0
506
+ 3,96.0,78.0,39.0,155.5482233502538,37.3,0.238,40,0
507
+ 10,75.0,82.0,29.153419593345657,155.5482233502538,33.3,0.263,38,0
508
+ 0,180.0,90.0,26.0,90.0,36.5,0.314,35,1
509
+ 1,130.0,60.0,23.0,170.0,28.6,0.692,21,0
510
+ 2,84.0,50.0,23.0,76.0,30.4,0.968,21,0
511
+ 8,120.0,78.0,29.153419593345657,155.5482233502538,25.0,0.409,64,0
512
+ 12,84.0,72.0,31.0,155.5482233502538,29.7,0.297,46,1
513
+ 0,139.0,62.0,17.0,210.0,22.1,0.207,21,0
514
+ 9,91.0,68.0,29.153419593345657,155.5482233502538,24.2,0.2,58,0
515
+ 2,91.0,62.0,29.153419593345657,155.5482233502538,27.3,0.525,22,0
516
+ 3,99.0,54.0,19.0,86.0,25.6,0.154,24,0
517
+ 3,163.0,70.0,18.0,105.0,31.6,0.268,28,1
518
+ 9,145.0,88.0,34.0,165.0,30.3,0.771,53,1
519
+ 7,125.0,86.0,29.153419593345657,155.5482233502538,37.6,0.304,51,0
520
+ 13,76.0,60.0,29.153419593345657,155.5482233502538,32.8,0.18,41,0
521
+ 6,129.0,90.0,7.0,326.0,19.6,0.582,60,0
522
+ 2,68.0,70.0,32.0,66.0,25.0,0.187,25,0
523
+ 3,124.0,80.0,33.0,130.0,33.2,0.305,26,0
524
+ 6,114.0,72.40518417462484,29.153419593345657,155.5482233502538,32.457463672391015,0.189,26,0
525
+ 9,130.0,70.0,29.153419593345657,155.5482233502538,34.2,0.652,45,1
526
+ 3,125.0,58.0,29.153419593345657,155.5482233502538,31.6,0.151,24,0
527
+ 3,87.0,60.0,18.0,155.5482233502538,21.8,0.444,21,0
528
+ 1,97.0,64.0,19.0,82.0,18.2,0.299,21,0
529
+ 3,116.0,74.0,15.0,105.0,26.3,0.107,24,0
530
+ 0,117.0,66.0,31.0,188.0,30.8,0.493,22,0
531
+ 0,111.0,65.0,29.153419593345657,155.5482233502538,24.6,0.66,31,0
532
+ 2,122.0,60.0,18.0,106.0,29.8,0.717,22,0
533
+ 0,107.0,76.0,29.153419593345657,155.5482233502538,45.3,0.686,24,0
534
+ 1,86.0,66.0,52.0,65.0,41.3,0.917,29,0
535
+ 6,91.0,72.40518417462484,29.153419593345657,155.5482233502538,29.8,0.501,31,0
536
+ 1,77.0,56.0,30.0,56.0,33.3,1.251,24,0
537
+ 4,132.0,72.40518417462484,29.153419593345657,155.5482233502538,32.9,0.302,23,1
538
+ 0,105.0,90.0,29.153419593345657,155.5482233502538,29.6,0.197,46,0
539
+ 0,57.0,60.0,29.153419593345657,155.5482233502538,21.7,0.735,67,0
540
+ 0,127.0,80.0,37.0,210.0,36.3,0.804,23,0
541
+ 3,129.0,92.0,49.0,155.0,36.4,0.968,32,1
542
+ 8,100.0,74.0,40.0,215.0,39.4,0.661,43,1
543
+ 3,128.0,72.0,25.0,190.0,32.4,0.549,27,1
544
+ 10,90.0,85.0,32.0,155.5482233502538,34.9,0.825,56,1
545
+ 4,84.0,90.0,23.0,56.0,39.5,0.159,25,0
546
+ 1,88.0,78.0,29.0,76.0,32.0,0.365,29,0
547
+ 8,186.0,90.0,35.0,225.0,34.5,0.423,37,1
548
+ 5,187.0,76.0,27.0,207.0,43.6,1.034,53,1
549
+ 4,131.0,68.0,21.0,166.0,33.1,0.16,28,0
550
+ 1,164.0,82.0,43.0,67.0,32.8,0.341,50,0
551
+ 4,189.0,110.0,31.0,155.5482233502538,28.5,0.68,37,0
552
+ 1,116.0,70.0,28.0,155.5482233502538,27.4,0.204,21,0
553
+ 3,84.0,68.0,30.0,106.0,31.9,0.591,25,0
554
+ 6,114.0,88.0,29.153419593345657,155.5482233502538,27.8,0.247,66,0
555
+ 1,88.0,62.0,24.0,44.0,29.9,0.422,23,0
556
+ 1,84.0,64.0,23.0,115.0,36.9,0.471,28,0
557
+ 7,124.0,70.0,33.0,215.0,25.5,0.161,37,0
558
+ 1,97.0,70.0,40.0,155.5482233502538,38.1,0.218,30,0
559
+ 8,110.0,76.0,29.153419593345657,155.5482233502538,27.8,0.237,58,0
560
+ 11,103.0,68.0,40.0,155.5482233502538,46.2,0.126,42,0
561
+ 11,85.0,74.0,29.153419593345657,155.5482233502538,30.1,0.3,35,0
562
+ 6,125.0,76.0,29.153419593345657,155.5482233502538,33.8,0.121,54,1
563
+ 0,198.0,66.0,32.0,274.0,41.3,0.502,28,1
564
+ 1,87.0,68.0,34.0,77.0,37.6,0.401,24,0
565
+ 6,99.0,60.0,19.0,54.0,26.9,0.497,32,0
566
+ 0,91.0,80.0,29.153419593345657,155.5482233502538,32.4,0.601,27,0
567
+ 2,95.0,54.0,14.0,88.0,26.1,0.748,22,0
568
+ 1,99.0,72.0,30.0,18.0,38.6,0.412,21,0
569
+ 6,92.0,62.0,32.0,126.0,32.0,0.085,46,0
570
+ 4,154.0,72.0,29.0,126.0,31.3,0.338,37,0
571
+ 0,121.0,66.0,30.0,165.0,34.3,0.203,33,1
572
+ 3,78.0,70.0,29.153419593345657,155.5482233502538,32.5,0.27,39,0
573
+ 2,130.0,96.0,29.153419593345657,155.5482233502538,22.6,0.268,21,0
574
+ 3,111.0,58.0,31.0,44.0,29.5,0.43,22,0
575
+ 2,98.0,60.0,17.0,120.0,34.7,0.198,22,0
576
+ 1,143.0,86.0,30.0,330.0,30.1,0.892,23,0
577
+ 1,119.0,44.0,47.0,63.0,35.5,0.28,25,0
578
+ 6,108.0,44.0,20.0,130.0,24.0,0.813,35,0
579
+ 2,118.0,80.0,29.153419593345657,155.5482233502538,42.9,0.693,21,1
580
+ 10,133.0,68.0,29.153419593345657,155.5482233502538,27.0,0.245,36,0
581
+ 2,197.0,70.0,99.0,155.5482233502538,34.7,0.575,62,1
582
+ 0,151.0,90.0,46.0,155.5482233502538,42.1,0.371,21,1
583
+ 6,109.0,60.0,27.0,155.5482233502538,25.0,0.206,27,0
584
+ 12,121.0,78.0,17.0,155.5482233502538,26.5,0.259,62,0
585
+ 8,100.0,76.0,29.153419593345657,155.5482233502538,38.7,0.19,42,0
586
+ 8,124.0,76.0,24.0,600.0,28.7,0.687,52,1
587
+ 1,93.0,56.0,11.0,155.5482233502538,22.5,0.417,22,0
588
+ 8,143.0,66.0,29.153419593345657,155.5482233502538,34.9,0.129,41,1
589
+ 6,103.0,66.0,29.153419593345657,155.5482233502538,24.3,0.249,29,0
590
+ 3,176.0,86.0,27.0,156.0,33.3,1.154,52,1
591
+ 0,73.0,72.40518417462484,29.153419593345657,155.5482233502538,21.1,0.342,25,0
592
+ 11,111.0,84.0,40.0,155.5482233502538,46.8,0.925,45,1
593
+ 2,112.0,78.0,50.0,140.0,39.4,0.175,24,0
594
+ 3,132.0,80.0,29.153419593345657,155.5482233502538,34.4,0.402,44,1
595
+ 2,82.0,52.0,22.0,115.0,28.5,1.699,25,0
596
+ 6,123.0,72.0,45.0,230.0,33.6,0.733,34,0
597
+ 0,188.0,82.0,14.0,185.0,32.0,0.682,22,1
598
+ 0,67.0,76.0,29.153419593345657,155.5482233502538,45.3,0.194,46,0
599
+ 1,89.0,24.0,19.0,25.0,27.8,0.559,21,0
600
+ 1,173.0,74.0,29.153419593345657,155.5482233502538,36.8,0.088,38,1
601
+ 1,109.0,38.0,18.0,120.0,23.1,0.407,26,0
602
+ 1,108.0,88.0,19.0,155.5482233502538,27.1,0.4,24,0
603
+ 6,96.0,72.40518417462484,29.153419593345657,155.5482233502538,23.7,0.19,28,0
604
+ 1,124.0,74.0,36.0,155.5482233502538,27.8,0.1,30,0
605
+ 7,150.0,78.0,29.0,126.0,35.2,0.692,54,1
606
+ 4,183.0,72.40518417462484,29.153419593345657,155.5482233502538,28.4,0.212,36,1
607
+ 1,124.0,60.0,32.0,155.5482233502538,35.8,0.514,21,0
608
+ 1,181.0,78.0,42.0,293.0,40.0,1.258,22,1
609
+ 1,92.0,62.0,25.0,41.0,19.5,0.482,25,0
610
+ 0,152.0,82.0,39.0,272.0,41.5,0.27,27,0
611
+ 1,111.0,62.0,13.0,182.0,24.0,0.138,23,0
612
+ 3,106.0,54.0,21.0,158.0,30.9,0.292,24,0
613
+ 3,174.0,58.0,22.0,194.0,32.9,0.593,36,1
614
+ 7,168.0,88.0,42.0,321.0,38.2,0.787,40,1
615
+ 6,105.0,80.0,28.0,155.5482233502538,32.5,0.878,26,0
616
+ 11,138.0,74.0,26.0,144.0,36.1,0.557,50,1
617
+ 3,106.0,72.0,29.153419593345657,155.5482233502538,25.8,0.207,27,0
618
+ 6,117.0,96.0,29.153419593345657,155.5482233502538,28.7,0.157,30,0
619
+ 2,68.0,62.0,13.0,15.0,20.1,0.257,23,0
620
+ 9,112.0,82.0,24.0,155.5482233502538,28.2,1.282,50,1
621
+ 0,119.0,72.40518417462484,29.153419593345657,155.5482233502538,32.4,0.141,24,1
622
+ 2,112.0,86.0,42.0,160.0,38.4,0.246,28,0
623
+ 2,92.0,76.0,20.0,155.5482233502538,24.2,1.698,28,0
624
+ 6,183.0,94.0,29.153419593345657,155.5482233502538,40.8,1.461,45,0
625
+ 0,94.0,70.0,27.0,115.0,43.5,0.347,21,0
626
+ 2,108.0,64.0,29.153419593345657,155.5482233502538,30.8,0.158,21,0
627
+ 4,90.0,88.0,47.0,54.0,37.7,0.362,29,0
628
+ 0,125.0,68.0,29.153419593345657,155.5482233502538,24.7,0.206,21,0
629
+ 0,132.0,78.0,29.153419593345657,155.5482233502538,32.4,0.393,21,0
630
+ 5,128.0,80.0,29.153419593345657,155.5482233502538,34.6,0.144,45,0
631
+ 4,94.0,65.0,22.0,155.5482233502538,24.7,0.148,21,0
632
+ 7,114.0,64.0,29.153419593345657,155.5482233502538,27.4,0.732,34,1
633
+ 0,102.0,78.0,40.0,90.0,34.5,0.238,24,0
634
+ 2,111.0,60.0,29.153419593345657,155.5482233502538,26.2,0.343,23,0
635
+ 1,128.0,82.0,17.0,183.0,27.5,0.115,22,0
636
+ 10,92.0,62.0,29.153419593345657,155.5482233502538,25.9,0.167,31,0
637
+ 13,104.0,72.0,29.153419593345657,155.5482233502538,31.2,0.465,38,1
638
+ 5,104.0,74.0,29.153419593345657,155.5482233502538,28.8,0.153,48,0
639
+ 2,94.0,76.0,18.0,66.0,31.6,0.649,23,0
640
+ 7,97.0,76.0,32.0,91.0,40.9,0.871,32,1
641
+ 1,100.0,74.0,12.0,46.0,19.5,0.149,28,0
642
+ 0,102.0,86.0,17.0,105.0,29.3,0.695,27,0
643
+ 4,128.0,70.0,29.153419593345657,155.5482233502538,34.3,0.303,24,0
644
+ 6,147.0,80.0,29.153419593345657,155.5482233502538,29.5,0.178,50,1
645
+ 4,90.0,72.40518417462484,29.153419593345657,155.5482233502538,28.0,0.61,31,0
646
+ 3,103.0,72.0,30.0,152.0,27.6,0.73,27,0
647
+ 2,157.0,74.0,35.0,440.0,39.4,0.134,30,0
648
+ 1,167.0,74.0,17.0,144.0,23.4,0.447,33,1
649
+ 0,179.0,50.0,36.0,159.0,37.8,0.455,22,1
650
+ 11,136.0,84.0,35.0,130.0,28.3,0.26,42,1
651
+ 0,107.0,60.0,25.0,155.5482233502538,26.4,0.133,23,0
652
+ 1,91.0,54.0,25.0,100.0,25.2,0.234,23,0
653
+ 1,117.0,60.0,23.0,106.0,33.8,0.466,27,0
654
+ 5,123.0,74.0,40.0,77.0,34.1,0.269,28,0
655
+ 2,120.0,54.0,29.153419593345657,155.5482233502538,26.8,0.455,27,0
656
+ 1,106.0,70.0,28.0,135.0,34.2,0.142,22,0
657
+ 2,155.0,52.0,27.0,540.0,38.7,0.24,25,1
658
+ 2,101.0,58.0,35.0,90.0,21.8,0.155,22,0
659
+ 1,120.0,80.0,48.0,200.0,38.9,1.162,41,0
660
+ 11,127.0,106.0,29.153419593345657,155.5482233502538,39.0,0.19,51,0
661
+ 3,80.0,82.0,31.0,70.0,34.2,1.292,27,1
662
+ 10,162.0,84.0,29.153419593345657,155.5482233502538,27.7,0.182,54,0
663
+ 1,199.0,76.0,43.0,155.5482233502538,42.9,1.394,22,1
664
+ 8,167.0,106.0,46.0,231.0,37.6,0.165,43,1
665
+ 9,145.0,80.0,46.0,130.0,37.9,0.637,40,1
666
+ 6,115.0,60.0,39.0,155.5482233502538,33.7,0.245,40,1
667
+ 1,112.0,80.0,45.0,132.0,34.8,0.217,24,0
668
+ 4,145.0,82.0,18.0,155.5482233502538,32.5,0.235,70,1
669
+ 10,111.0,70.0,27.0,155.5482233502538,27.5,0.141,40,1
670
+ 6,98.0,58.0,33.0,190.0,34.0,0.43,43,0
671
+ 9,154.0,78.0,30.0,100.0,30.9,0.164,45,0
672
+ 6,165.0,68.0,26.0,168.0,33.6,0.631,49,0
673
+ 1,99.0,58.0,10.0,155.5482233502538,25.4,0.551,21,0
674
+ 10,68.0,106.0,23.0,49.0,35.5,0.285,47,0
675
+ 3,123.0,100.0,35.0,240.0,57.3,0.88,22,0
676
+ 8,91.0,82.0,29.153419593345657,155.5482233502538,35.6,0.587,68,0
677
+ 6,195.0,70.0,29.153419593345657,155.5482233502538,30.9,0.328,31,1
678
+ 9,156.0,86.0,29.153419593345657,155.5482233502538,24.8,0.23,53,1
679
+ 0,93.0,60.0,29.153419593345657,155.5482233502538,35.3,0.263,25,0
680
+ 3,121.0,52.0,29.153419593345657,155.5482233502538,36.0,0.127,25,1
681
+ 2,101.0,58.0,17.0,265.0,24.2,0.614,23,0
682
+ 2,56.0,56.0,28.0,45.0,24.2,0.332,22,0
683
+ 0,162.0,76.0,36.0,155.5482233502538,49.6,0.364,26,1
684
+ 0,95.0,64.0,39.0,105.0,44.6,0.366,22,0
685
+ 4,125.0,80.0,29.153419593345657,155.5482233502538,32.3,0.536,27,1
686
+ 5,136.0,82.0,29.153419593345657,155.5482233502538,32.457463672391015,0.64,69,0
687
+ 2,129.0,74.0,26.0,205.0,33.2,0.591,25,0
688
+ 3,130.0,64.0,29.153419593345657,155.5482233502538,23.1,0.314,22,0
689
+ 1,107.0,50.0,19.0,155.5482233502538,28.3,0.181,29,0
690
+ 1,140.0,74.0,26.0,180.0,24.1,0.828,23,0
691
+ 1,144.0,82.0,46.0,180.0,46.1,0.335,46,1
692
+ 8,107.0,80.0,29.153419593345657,155.5482233502538,24.6,0.856,34,0
693
+ 13,158.0,114.0,29.153419593345657,155.5482233502538,42.3,0.257,44,1
694
+ 2,121.0,70.0,32.0,95.0,39.1,0.886,23,0
695
+ 7,129.0,68.0,49.0,125.0,38.5,0.439,43,1
696
+ 2,90.0,60.0,29.153419593345657,155.5482233502538,23.5,0.191,25,0
697
+ 7,142.0,90.0,24.0,480.0,30.4,0.128,43,1
698
+ 3,169.0,74.0,19.0,125.0,29.9,0.268,31,1
699
+ 0,99.0,72.40518417462484,29.153419593345657,155.5482233502538,25.0,0.253,22,0
700
+ 4,127.0,88.0,11.0,155.0,34.5,0.598,28,0
701
+ 4,118.0,70.0,29.153419593345657,155.5482233502538,44.5,0.904,26,0
702
+ 2,122.0,76.0,27.0,200.0,35.9,0.483,26,0
703
+ 6,125.0,78.0,31.0,155.5482233502538,27.6,0.565,49,1
704
+ 1,168.0,88.0,29.0,155.5482233502538,35.0,0.905,52,1
705
+ 2,129.0,72.40518417462484,29.153419593345657,155.5482233502538,38.5,0.304,41,0
706
+ 4,110.0,76.0,20.0,100.0,28.4,0.118,27,0
707
+ 6,80.0,80.0,36.0,155.5482233502538,39.8,0.177,28,0
708
+ 10,115.0,72.40518417462484,29.153419593345657,155.5482233502538,32.457463672391015,0.261,30,1
709
+ 2,127.0,46.0,21.0,335.0,34.4,0.176,22,0
710
+ 9,164.0,78.0,29.153419593345657,155.5482233502538,32.8,0.148,45,1
711
+ 2,93.0,64.0,32.0,160.0,38.0,0.674,23,1
712
+ 3,158.0,64.0,13.0,387.0,31.2,0.295,24,0
713
+ 5,126.0,78.0,27.0,22.0,29.6,0.439,40,0
714
+ 10,129.0,62.0,36.0,155.5482233502538,41.2,0.441,38,1
715
+ 0,134.0,58.0,20.0,291.0,26.4,0.352,21,0
716
+ 3,102.0,74.0,29.153419593345657,155.5482233502538,29.5,0.121,32,0
717
+ 7,187.0,50.0,33.0,392.0,33.9,0.826,34,1
718
+ 3,173.0,78.0,39.0,185.0,33.8,0.97,31,1
719
+ 10,94.0,72.0,18.0,155.5482233502538,23.1,0.595,56,0
720
+ 1,108.0,60.0,46.0,178.0,35.5,0.415,24,0
721
+ 5,97.0,76.0,27.0,155.5482233502538,35.6,0.378,52,1
722
+ 4,83.0,86.0,19.0,155.5482233502538,29.3,0.317,34,0
723
+ 1,114.0,66.0,36.0,200.0,38.1,0.289,21,0
724
+ 1,149.0,68.0,29.0,127.0,29.3,0.349,42,1
725
+ 5,117.0,86.0,30.0,105.0,39.1,0.251,42,0
726
+ 1,111.0,94.0,29.153419593345657,155.5482233502538,32.8,0.265,45,0
727
+ 4,112.0,78.0,40.0,155.5482233502538,39.4,0.236,38,0
728
+ 1,116.0,78.0,29.0,180.0,36.1,0.496,25,0
729
+ 0,141.0,84.0,26.0,155.5482233502538,32.4,0.433,22,0
730
+ 2,175.0,88.0,29.153419593345657,155.5482233502538,22.9,0.326,22,0
731
+ 2,92.0,52.0,29.153419593345657,155.5482233502538,30.1,0.141,22,0
732
+ 3,130.0,78.0,23.0,79.0,28.4,0.323,34,1
733
+ 8,120.0,86.0,29.153419593345657,155.5482233502538,28.4,0.259,22,1
734
+ 2,174.0,88.0,37.0,120.0,44.5,0.646,24,1
735
+ 2,106.0,56.0,27.0,165.0,29.0,0.426,22,0
736
+ 2,105.0,75.0,29.153419593345657,155.5482233502538,23.3,0.56,53,0
737
+ 4,95.0,60.0,32.0,155.5482233502538,35.4,0.284,28,0
738
+ 0,126.0,86.0,27.0,120.0,27.4,0.515,21,0
739
+ 8,65.0,72.0,23.0,155.5482233502538,32.0,0.6,42,0
740
+ 2,99.0,60.0,17.0,160.0,36.6,0.453,21,0
741
+ 1,102.0,74.0,29.153419593345657,155.5482233502538,39.5,0.293,42,1
742
+ 11,120.0,80.0,37.0,150.0,42.3,0.785,48,1
743
+ 3,102.0,44.0,20.0,94.0,30.8,0.4,26,0
744
+ 1,109.0,58.0,18.0,116.0,28.5,0.219,22,0
745
+ 9,140.0,94.0,29.153419593345657,155.5482233502538,32.7,0.734,45,1
746
+ 13,153.0,88.0,37.0,140.0,40.6,1.174,39,0
747
+ 12,100.0,84.0,33.0,105.0,30.0,0.488,46,0
748
+ 1,147.0,94.0,41.0,155.5482233502538,49.3,0.358,27,1
749
+ 1,81.0,74.0,41.0,57.0,46.3,1.096,32,0
750
+ 3,187.0,70.0,22.0,200.0,36.4,0.408,36,1
751
+ 6,162.0,62.0,29.153419593345657,155.5482233502538,24.3,0.178,50,1
752
+ 4,136.0,70.0,29.153419593345657,155.5482233502538,31.2,1.182,22,1
753
+ 1,121.0,78.0,39.0,74.0,39.0,0.261,28,0
754
+ 3,108.0,62.0,24.0,155.5482233502538,26.0,0.223,25,0
755
+ 0,181.0,88.0,44.0,510.0,43.3,0.222,26,1
756
+ 8,154.0,78.0,32.0,155.5482233502538,32.4,0.443,45,1
757
+ 1,128.0,88.0,39.0,110.0,36.5,1.057,37,1
758
+ 7,137.0,90.0,41.0,155.5482233502538,32.0,0.391,39,0
759
+ 0,123.0,72.0,29.153419593345657,155.5482233502538,36.3,0.258,52,1
760
+ 1,106.0,76.0,29.153419593345657,155.5482233502538,37.5,0.197,26,0
761
+ 6,190.0,92.0,29.153419593345657,155.5482233502538,35.5,0.278,66,1
762
+ 2,88.0,58.0,26.0,16.0,28.4,0.766,22,0
763
+ 9,170.0,74.0,31.0,155.5482233502538,44.0,0.403,43,1
764
+ 9,89.0,62.0,29.153419593345657,155.5482233502538,22.5,0.142,33,0
765
+ 10,101.0,76.0,48.0,180.0,32.9,0.171,63,0
766
+ 2,122.0,70.0,27.0,155.5482233502538,36.8,0.34,27,0
767
+ 5,121.0,72.0,23.0,112.0,26.2,0.245,30,0
768
+ 1,126.0,60.0,29.153419593345657,155.5482233502538,30.1,0.349,47,1
769
+ 1,93.0,70.0,31.0,155.5482233502538,30.4,0.315,23,0
data/scaled_data.csv ADDED
The diff for this file is too large to render. See raw diff
 
glycemic_risk_assesment.egg-info/PKG-INFO ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.2
2
+ Name: glycemic-risk-assesment
3
+ Version: 0.1.0
4
+ Summary: glycemic risk assesment personal assistant
5
+ Author: shaik maazuddin
6
+ Author-email: [email protected]
7
+ Dynamic: author
8
+ Dynamic: author-email
9
+ Dynamic: summary
glycemic_risk_assesment.egg-info/SOURCES.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ setup.py
2
+ glycemic_risk_assesment.egg-info/PKG-INFO
3
+ glycemic_risk_assesment.egg-info/SOURCES.txt
4
+ glycemic_risk_assesment.egg-info/dependency_links.txt
5
+ glycemic_risk_assesment.egg-info/top_level.txt
6
+ src/__init__.py
7
+ tests/tests.py
glycemic_risk_assesment.egg-info/dependency_links.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
glycemic_risk_assesment.egg-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ src
notebook/Diabetes_prediction_model.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
requirements.txt ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Core packages
2
+ pandas==2.1.1
3
+ numpy==1.23.5
4
+ scikit-learn==1.3.0
5
+ flask==3.0.0
6
+
7
+ scipy==1.11.3
8
+ joblib==1.3.2
9
+ # Visualization
10
+ plotly==5.15.0
11
+ seaborn==0.12.2
12
+ matplotlib==3.8.0
13
+ # Dev and Utilities
14
+ ipython==8.12.0
15
+ jupyterlab==4.0.6
16
+ pytest==7.4.2
17
+ black==23.9.1
18
+ flake8==6.1.0
19
+ # Serialization
20
+ pickle-mixin==1.0.2
21
+ # Web App Utilities
22
+ gunicorn==21.2.0
23
+ # Environment Management
24
+ python-dotenv==1.0.0
25
+ openai==0.27.0
setup.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from setuptools import setup, find_packages
2
+
3
+ setup(
4
+ name="glycemic risk assesment",
5
+ version="0.1.0",
6
+ description="glycemic risk assesment personal assistant",
7
+ author="shaik maazuddin",
8
+ author_email="[email protected]",
9
+ packages=find_packages(), # Automatically discover all packages and sub-packages
10
+
11
+ )
src/__init__.py ADDED
File without changes
src/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (164 Bytes). View file
 
src/app/app.py ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, render_template
2
+ from src.scripts.prediction import PredictionModel
3
+ from src.scripts.health_recommendations import HealthRecommendations
4
+
5
+ app = Flask(__name__, template_folder='../templates')
6
+
7
+ # Define paths for model and scaler based on your directory structure
8
+ MODEL_PATH = "src/models/svm_model.pkl"
9
+ SCALER_PATH = "src/models/scaler.pkl"
10
+
11
+ # Define feature columns
12
+ FEATURE_COLUMNS = [
13
+ 'Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness',
14
+ 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age'
15
+ ]
16
+
17
+ # Initialize components
18
+ try:
19
+ predictor = PredictionModel(MODEL_PATH, SCALER_PATH)
20
+ health_advisor = HealthRecommendations()
21
+ except Exception as e:
22
+ print(f"Error initializing components: {e}")
23
+ raise
24
+
25
+
26
+ @app.route('/', methods=['GET', 'POST'])
27
+ def home():
28
+ # For GET requests, render an empty form
29
+ if request.method == 'GET':
30
+ return render_template('index.html')
31
+
32
+ # For POST requests, handle the form submission
33
+ elif request.method == 'POST':
34
+ try:
35
+ # Collect form data
36
+ features = []
37
+ form_data = {}
38
+
39
+ for field in FEATURE_COLUMNS:
40
+ value = request.form.get(field)
41
+ if not value:
42
+ raise ValueError(f"Missing required field: {field}")
43
+ features.append(float(value))
44
+ form_data[field] = value
45
+
46
+ # Generate prediction
47
+ prediction_result = predictor.predict(features, FEATURE_COLUMNS)
48
+ if not prediction_result:
49
+ raise ValueError("Failed to generate prediction")
50
+
51
+ # Format prediction for health recommendations
52
+ health_prediction = {
53
+ 'is_diabetic': bool(prediction_result['prediction']),
54
+ 'probability': prediction_result['probability']
55
+ }
56
+
57
+ # Get health recommendations from Gemini API
58
+ recommendations = health_advisor.get_recommendations(
59
+ patient_data={
60
+ 'Glucose': form_data['Glucose'],
61
+ 'BloodPressure': form_data['BloodPressure'],
62
+ 'BMI': form_data['BMI'],
63
+ 'Age': form_data['Age']
64
+ },
65
+ prediction=health_prediction
66
+ )
67
+
68
+ # Prepare result message
69
+ if health_prediction['is_diabetic']:
70
+ result = f"Based on the analysis, this person is likely diabetic (Confidence: {health_prediction['probability']*100:.1f}%)"
71
+ else:
72
+ result = f"Based on the analysis, this person is not likely diabetic (Confidence: {(1-health_prediction['probability'])*100:.1f}%)"
73
+
74
+ # Render the page with results
75
+ return render_template(
76
+ 'index.html',
77
+ result=result,
78
+ suggestions=recommendations,
79
+ input_data=form_data
80
+ )
81
+
82
+ except ValueError as ve:
83
+ # Handle missing or invalid data
84
+ return render_template('index.html', error=str(ve))
85
+ except Exception as e:
86
+ print(f"Error in prediction or recommendation generation: {e}")
87
+ return render_template('index.html', error="An unexpected error occurred during prediction.")
88
+
89
+
90
+ @app.errorhandler(404)
91
+ def not_found_error(error):
92
+ return render_template('index.html', error="Page not found"), 404
93
+
94
+
95
+ @app.errorhandler(500)
96
+ def internal_error(error):
97
+ return render_template('index.html', error="Internal server error occurred."), 500
98
+
99
+
100
+ if __name__ == '__main__':
101
+ app.run(debug=True)
src/models/scaler.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bd4df18aec5c934e98f9b0d7f4b7877b8cd8893ec29fb2d23612641d06952146
3
+ size 833
src/models/svm_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cf0a4ec01a7fd6a82a2e883e491d8d7cd7a67c0e5b081dbb94cd6f55fec43295
3
+ size 27930
src/scripts/__pycache__/data_preprocessing.cpython-311.pyc ADDED
Binary file (2.59 kB). View file
 
src/scripts/__pycache__/health_recommendations.cpython-311.pyc ADDED
Binary file (7.26 kB). View file
 
src/scripts/__pycache__/prediction.cpython-311.pyc ADDED
Binary file (2.91 kB). View file
 
src/scripts/data_preprocessing.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+ from sklearn.preprocessing import StandardScaler
4
+ import os
5
+ import pickle
6
+
7
+ class DataPreprocessor:
8
+ def __init__(self):
9
+ self.scaler = StandardScaler()
10
+
11
+ def load_data(self, filepath):
12
+ """Load and return the dataset"""
13
+ if not os.path.exists(filepath):
14
+ raise FileNotFoundError(f"The file at {filepath} does not exist.")
15
+ df = pd.read_csv(filepath)
16
+ print("Data loaded successfully.")
17
+ return df
18
+
19
+ def preprocess_data(self, df):
20
+ """Preprocess the data by handling missing values"""
21
+ # Handle missing values (zeros)
22
+ features_to_process = ['Glucose', 'BloodPressure', 'SkinThickness', 'BMI', 'Insulin']
23
+ for feature in features_to_process:
24
+ mean_value = df[feature].replace(0, np.nan).mean()
25
+ df[feature] = df[feature].replace(0, mean_value)
26
+
27
+ print("Missing values handled.")
28
+ return df
29
+
30
+ def split_data(self, df):
31
+ """Split data into features and target"""
32
+ features = df.drop('Outcome', axis=1)
33
+ target = df['Outcome']
34
+ return features, target
35
+
36
+ def scale_features(self, features, is_training=False):
37
+ """Scale features using StandardScaler"""
38
+ if is_training:
39
+ scaled_features = self.scaler.fit_transform(features)
40
+ # Save the scaler for future use
41
+ model_dir = "src/models"
42
+ os.makedirs(model_dir, exist_ok=True)
43
+ # Save the scaler as a pickle file
44
+ with open(f"{model_dir}/scaler.pkl", 'wb') as f:
45
+ pickle.dump(self.scaler, f)
46
+ # Save the scaled data as a CSV file
47
+ scaled_df = pd.DataFrame(scaled_features, columns=features.columns)
48
+ scaled_df['Outcome'] = df['Outcome'] # Add the Outcome column back
49
+ scaled_csv_path = "data/scaled_data.csv"
50
+ scaled_df.to_csv(scaled_csv_path, index=False)
51
+ print("Scaled data saved as csv file.")
52
+ else:
53
+ scaled_features = self.scaler.transform(features)
54
+
55
+ return scaled_features
56
+
57
+
58
+ if __name__ == "__main__":
59
+ preprocessor = DataPreprocessor()
60
+
61
+ # Load and preprocess data
62
+ df = preprocessor.load_data("data/preprocessed_data.csv")
63
+ df = preprocessor.preprocess_data(df)
64
+
65
+ # Split data into features and target
66
+ features, target = preprocessor.split_data(df)
67
+
68
+ # Scale features (Training phase)
69
+ scaled_features = preprocessor.scale_features(features, is_training=True)
70
+
71
+ print("Data preprocessing completed.")
src/scripts/health_recommendations.py ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Dict, List
2
+ import os
3
+ import google.generativeai as genai
4
+ import re
5
+
6
+ class HealthRecommendations:
7
+ def __init__(self):
8
+ # Configure Google GenAI
9
+ api_key = os.getenv('AIzaSyAdCzdbvGIWIDfVdZre1n-10SIBf9bgcVk') # Fetch from environment variable
10
+ genai.configure(api_key='AIzaSyAdCzdbvGIWIDfVdZre1n-10SIBf9bgcVk')
11
+
12
+ def get_recommendations(self, patient_data: Dict, prediction: Dict) -> Dict[str, List[str]]:
13
+ """Generate personalized health recommendations based on patient data and prediction"""
14
+
15
+ # Create a prompt for the LLM
16
+ prompt = self._create_prompt(patient_data, prediction)
17
+
18
+ try:
19
+ print("Generated prompt:", prompt) # Debugging: Check the prompt
20
+
21
+ model = genai.GenerativeModel("gemini-1.5-flash")
22
+ print("Model initialized successfully") # Debugging
23
+
24
+ response = model.generate_content(
25
+ contents=[{"parts": [{"text": prompt}]}],
26
+ generation_config=genai.types.GenerationConfig(temperature=0.7, max_output_tokens=500)
27
+ )
28
+
29
+ print("Response from API:", response) # Debugging: Check the response
30
+
31
+ if response.candidates and response.candidates[0].content.parts: # Check if response and parts exist
32
+ response_text = response.candidates[0].content.parts[0].text
33
+ recommendations = self._parse_recommendations(response_text)
34
+ return recommendations
35
+ else:
36
+ print("Unexpected response format from the API.")
37
+ return self._get_fallback_recommendations(prediction['is_diabetic'])
38
+
39
+ except Exception as e:
40
+ print(f"Error generating recommendations: {e}")
41
+ return self._get_fallback_recommendations(prediction['is_diabetic'])
42
+
43
+ def _create_prompt(self, patient_data: Dict, prediction: Dict) -> str:
44
+ """Create a prompt for the LLM based on patient data"""
45
+ risk_level = "high" if prediction['probability'] > 0.7 else "moderate" if prediction['probability'] > 0.3 else "low"
46
+
47
+ prompt = f"""
48
+ Based on the following patient data:
49
+ - Glucose Level: {patient_data['Glucose']}
50
+ - Blood Pressure: {patient_data['BloodPressure']}
51
+ - BMI: {patient_data['BMI']}
52
+ - Age: {patient_data['Age']}
53
+ - Diabetes Risk Level: {risk_level}
54
+
55
+ Please provide specific recommendations in the following categories:
56
+ 1. Diet and Nutrition
57
+ 2. Physical Activity
58
+ 3. Lifestyle Changes
59
+ 4. Monitoring and Prevention
60
+
61
+ Make the recommendations specific to this patient's condition and risk level.
62
+ """
63
+ return prompt
64
+
65
+ def _parse_recommendations(self, response: str) -> Dict[str, List[str]]:
66
+ """Parse the LLM response into structured recommendations and remove all asterisks."""
67
+
68
+ # Categories we expect in the response
69
+ categories = ['Diet and Nutrition', 'Physical Activity', 'Lifestyle Changes', 'Monitoring and Prevention']
70
+ recommendations = {category: [] for category in categories}
71
+
72
+ # Assuming the text is extracted from the API response
73
+ api_response_text = response # This would be the text from the API, adjust based on the actual response structure
74
+
75
+ # Regex patterns to match categories and extract their associated recommendations
76
+ current_category = None
77
+ lines = api_response_text.split("\n")
78
+
79
+ for line in lines:
80
+ line = line.strip()
81
+
82
+ # Check if the line is a category
83
+ if any(category in line for category in categories):
84
+ for category in categories:
85
+ if category in line:
86
+ current_category = category
87
+ break
88
+ elif line and current_category:
89
+ # Remove all asterisks from the line
90
+ cleaned_line = re.sub(r'\*+', '', line).strip() # Remove all asterisks and leading/trailing spaces
91
+ if cleaned_line: # Add only non-empty lines
92
+ recommendations[current_category].append(cleaned_line)
93
+
94
+ return recommendations
95
+
96
+ def _get_fallback_recommendations(self, is_diabetic: bool) -> Dict[str, List[str]]:
97
+ """Provide fallback recommendations if API call fails"""
98
+ if is_diabetic:
99
+ return {
100
+ '1.Diet and Nutrition': [
101
+ 'Monitor carbohydrate intake and follow a balanced diet',
102
+ 'Eat plenty of vegetables and whole grains',
103
+ 'Limit sugary foods and beverages'
104
+ ],
105
+ 'Physical Activity': [
106
+ 'Aim for 150 minutes of moderate exercise per week',
107
+ 'Include both aerobic and strength training exercises',
108
+ 'Take regular walking breaks during the day'
109
+ ],
110
+ 'Lifestyle Changes': [
111
+ 'Monitor blood sugar regularly',
112
+ 'Maintain a healthy sleep schedule',
113
+ 'Manage stress through relaxation techniques'
114
+ ],
115
+ 'Monitoring and Prevention': [
116
+ 'Regular check-ups with healthcare provider',
117
+ 'Keep track of blood sugar levels',
118
+ 'Monitor blood pressure and weight.1'
119
+ ]
120
+ }
121
+ else:
122
+ return {
123
+ '2.Diet and Nutrition': [
124
+ 'Follow a balanced diet rich in whole foods',
125
+ 'Limit processed foods and added sugars',
126
+ 'Stay hydrated with water'
127
+ ],
128
+ 'Physical Activity': [
129
+ 'Regular exercise for 30 minutes daily',
130
+ 'Include variety in your workout routine',
131
+ 'Stay active throughout the day'
132
+ ],
133
+ 'Lifestyle Changes': [
134
+ 'Maintain a healthy weight',
135
+ 'Get adequate sleep',
136
+ 'Practice stress management'
137
+ ],
138
+ 'Monitoring and Prevention': [
139
+ 'Regular health check-ups',
140
+ 'Annual blood sugar screening',
141
+ 'Monitor weight and blood pressure.2'
142
+ ]
143
+ }
144
+
src/scripts/model_training.py ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sklearn.model_selection import train_test_split
2
+ from sklearn.svm import SVC
3
+ import pandas as pd
4
+ import pickle
5
+ import os
6
+
7
+ class ModelTrainer:
8
+ def __init__(self):
9
+ self.model = None
10
+
11
+ def train_model(self, data_path):
12
+ """Train the SVM model with the provided dataset"""
13
+ if not os.path.exists(data_path):
14
+ raise FileNotFoundError(f"The data file at {data_path} does not exist.")
15
+
16
+ # Load and preprocess data
17
+ df = pd.read_csv(data_path)
18
+ X = df.drop(columns=['Outcome'])
19
+ y = df['Outcome']
20
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=56)
21
+
22
+ # Train the SVM model
23
+ print("Training the SVM model...")
24
+ self.model = SVC(C=1, kernel='linear', probability=True)
25
+ self.model.fit(X_train, y_train)
26
+ print("Model training completed.")
27
+
28
+ # Save the model
29
+ model_dir = "src/models"
30
+ os.makedirs(model_dir, exist_ok=True)
31
+ with open(f"{model_dir}/svm_model.pkl", 'wb') as f:
32
+ pickle.dump(self.model, f)
33
+ print("Model saved successfully.")
34
+
35
+ #def load_model(self):
36
+
37
+ if __name__ == "__main__":
38
+ trainer = ModelTrainer()
39
+ trainer.train_model("data/scaled_data.csv")
40
+ print("Model training completed.") # This line is added to the original script
src/scripts/prediction.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import pickle
3
+
4
+ class PredictionModel:
5
+ def __init__(self, model_path, scaler_path):
6
+ # Load the trained model
7
+ with open(model_path, 'rb') as model_file:
8
+ self.model = pickle.load(model_file)
9
+
10
+ # Load the scaler
11
+ with open(scaler_path, 'rb') as scaler_file:
12
+ self.scaler = pickle.load(scaler_file)
13
+
14
+ def predict(self, features, feature_columns):
15
+ try:
16
+ # Convert features to DataFrame with proper column names
17
+ features_df = pd.DataFrame([features], columns=feature_columns)
18
+ # Scale features using the scaler
19
+ scaled_features = self.scaler.transform(features_df) # Make sure features_df has the correct column names
20
+ scaled_features = pd.DataFrame(scaled_features, columns=feature_columns)
21
+
22
+ # Make predictions
23
+ prediction = self.model.predict(scaled_features)
24
+ probability = self.model.predict_proba(scaled_features)[0][1]
25
+
26
+ return {
27
+ "prediction": int(prediction[0]),
28
+ "probability": probability
29
+ }
30
+ except Exception as e:
31
+ print(f"Error during prediction: {e}")
32
+ return None
33
+
34
+ # Example usage
35
+ if __name__ == "__main__":
36
+ model_path = "src/models/svm_model.pkl" # Path to the trained model
37
+ scaler_path = "src/models/scaler.pkl" # Path to the saved scaler
38
+
39
+ # Example input features (they should match the training data structure)
40
+ feature_columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness',
41
+ 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age']
42
+
43
+ input_features = [6,148.0,72.0,35.0,155.5482233502538,33.6,0.627,50] # Replace with actual input
44
+
45
+ predictor = PredictionModel(model_path, scaler_path)
46
+ result = predictor.predict(input_features, feature_columns)
47
+
48
+ if result:
49
+ print(f"Prediction: {result['prediction']}, Probability: {result['probability']}")
src/scripts/temp ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ # Add the project root directory to sys.path
4
+ project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../"))
5
+ sys.path.append(project_root)
6
+ import google.generativeai as genai
7
+
8
+ from flask import Flask, request, jsonify, render_template
9
+ from src.scripts.data_preprocessing import DataPreprocessor
10
+ from src.scripts.prediction import DiabetesPrediction
11
+
12
+ class HealthRecommendations:
13
+ def __init__(self, api_key):
14
+ # Configure Google GenAI
15
+ genai.configure(api_key=api_key)
16
+ # For this example, we'll use the gemini-pro model
17
+ self.model = genai.GenerativeModel('gemini-pro')
18
+
19
+ def get_recommendations(self, patient_data, prediction):
20
+ # Create a prompt for the model
21
+ prompt = f"""
22
+ Given the following patient data:
23
+ - Glucose level: {patient_data['Glucose']}
24
+ - Blood Pressure: {patient_data['BloodPressure']}
25
+ - BMI: {patient_data['BMI']}
26
+ - Age: {patient_data['Age']}
27
+ - Diabetes Prediction: {'Positive' if prediction == 1 else 'Negative'}
28
+
29
+ Please provide specific health recommendations for this patient considering their metrics
30
+ and diabetes risk status. Focus on diet, exercise, and lifestyle changes.
31
+ """
32
+
33
+ # Generate response using Google GenAI
34
+ response = self.model.generate_content(prompt)
35
+
36
+ # Extract and return the recommendations
37
+ return response.text
38
+
39
+ app = Flask(__name__, template_folder='src/templates')
40
+
41
+ # Initialize components
42
+ predictor = DiabetesPrediction()
43
+ health_advisor = HealthRecommendations(api_key=os.getenv('AIzaSyBMh7bQCD1tf_9w7C04zNoJocEtHg9KLjI')) # Changed to use Google API key
44
+
45
+ @app.route('/')
46
+ def home():
47
+ return render_template('index.html')
48
+
49
+ @app.route('/predict', methods=['POST'])
50
+ def predict():
51
+ try:
52
+ # Get data from request
53
+ data = request.json
54
+ features = [
55
+ float(data['pregnancies']),
56
+ float(data['glucose']),
57
+ float(data['bloodPressure']),
58
+ float(data['skinThickness']),
59
+ float(data['insulin']),
60
+ float(data['bmi']),
61
+ float(data['diabetesPedigree']),
62
+ float(data['age'])
63
+ ]
64
+
65
+ # Make prediction
66
+ prediction_result = predictor.predict(features)
67
+
68
+ # Get health recommendations
69
+ recommendations = health_advisor.get_recommendations(
70
+ patient_data={
71
+ 'Glucose': data['glucose'],
72
+ 'BloodPressure': data['bloodPressure'],
73
+ 'BMI': data['bmi'],
74
+ 'Age': data['age']
75
+ },
76
+ prediction=prediction_result
77
+ )
78
+
79
+ return jsonify({
80
+ 'prediction': prediction_result,
81
+ 'recommendations': recommendations
82
+ })
83
+
84
+ except Exception as e:
85
+ return jsonify({'error': str(e)}), 400
86
+
87
+ if __name__ == '__main__':
88
+ app.run(debug=True)
src/templates/index.html ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Diabetes Risk Assessment</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ </head>
9
+ <body class="bg-gray-100 min-h-screen">
10
+ <div class="container mx-auto px-4 py-8">
11
+ <h1 class="text-3xl font-bold text-center mb-8 text-gray-800">Diabetes Risk Assessment Tool</h1>
12
+
13
+ <!-- Error Message -->
14
+ {% if error %}
15
+ <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded mb-4" role="alert">
16
+ <p class="font-bold">Error:</p>
17
+ <p>{{ error }}</p>
18
+ </div>
19
+ {% endif %}
20
+
21
+ <!-- Input Form -->
22
+ <div class="bg-white p-6 rounded-lg shadow-md mb-8">
23
+ <form method="POST" action="{{ url_for('home') }}" class="space-y-6">
24
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
25
+ <div class="space-y-4">
26
+ <div>
27
+ <label for="Pregnancies" class="block text-sm font-semibold text-gray-700 mb-1">Number of Pregnancies</label>
28
+ <input type="number" id="Pregnancies" name="Pregnancies" min="0" max="20" step="1"
29
+ class="mt-1 block w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
30
+ value="{{ input_data.Pregnancies if input_data else '' }}" required>
31
+ </div>
32
+ <div>
33
+ <label for="Glucose" class="block text-sm font-semibold text-gray-700 mb-1">Glucose Level (mg/dL)</label>
34
+ <input type="number" id="Glucose" name="Glucose" min="0" max="500"
35
+ class="mt-1 block w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
36
+ value="{{ input_data.Glucose if input_data else '' }}" required>
37
+ </div>
38
+ <div>
39
+ <label for="BloodPressure" class="block text-sm font-semibold text-gray-700 mb-1">Blood Pressure (mm Hg)</label>
40
+ <input type="number" id="BloodPressure" name="BloodPressure" min="0" max="300"
41
+ class="mt-1 block w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
42
+ value="{{ input_data.BloodPressure if input_data else '' }}" required>
43
+ </div>
44
+ <div>
45
+ <label for="SkinThickness" class="block text-sm font-semibold text-gray-700 mb-1">Skin Thickness (mm)</label>
46
+ <input type="number" id="SkinThickness" name="SkinThickness" min="0" max="100"
47
+ class="mt-1 block w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
48
+ value="{{ input_data.SkinThickness if input_data else '' }}" required>
49
+ </div>
50
+ </div>
51
+
52
+ <div class="space-y-4">
53
+ <div>
54
+ <label for="Insulin" class="block text-sm font-semibold text-gray-700 mb-1">Insulin Level (mu U/ml)</label>
55
+ <input type="number" id="Insulin" name="Insulin" min="0" max="1000"
56
+ class="mt-1 block w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
57
+ value="{{ input_data.Insulin if input_data else '' }}" required>
58
+ </div>
59
+ <div>
60
+ <label for="BMI" class="block text-sm font-semibold text-gray-700 mb-1">BMI</label>
61
+ <input type="number" id="BMI" name="BMI" min="0" max="100" step="0.1"
62
+ class="mt-1 block w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
63
+ value="{{ input_data.BMI if input_data else '' }}" required>
64
+ </div>
65
+ <div>
66
+ <label for="DiabetesPedigreeFunction" class="block text-sm font-semibold text-gray-700 mb-1">Diabetes Pedigree Function</label>
67
+ <input type="number" id="DiabetesPedigreeFunction" name="DiabetesPedigreeFunction" min="0" max="3" step="0.001"
68
+ class="mt-1 block w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
69
+ value="{{ input_data.DiabetesPedigreeFunction if input_data else '' }}" required>
70
+ </div>
71
+ <div>
72
+ <label for="Age" class="block text-sm font-semibold text-gray-700 mb-1">Age</label>
73
+ <input type="number" id="Age" name="Age" min="0" max="120"
74
+ class="mt-1 block w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
75
+ value="{{ input_data.Age if input_data else '' }}" required>
76
+ </div>
77
+ </div>
78
+ </div>
79
+
80
+ <div class="flex justify-center mt-8">
81
+ <button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-8 rounded-lg shadow-md transition duration-300 text-lg">
82
+ Get Assessment
83
+ </button>
84
+ </div>
85
+ </form>
86
+ </div>
87
+
88
+ <!-- Results Section -->
89
+ {% if result %}
90
+ <div class="bg-white p-8 rounded-lg shadow-md space-y-6">
91
+ <div class="text-center">
92
+ <h2 class="text-2xl font-bold mb-4">Assessment Result</h2>
93
+ <p class="text-lg {% if 'diabetic' in result %}text-red-600{% else %}text-green-600{% endif %} font-semibold">
94
+ {{ result }}
95
+ </p>
96
+ </div>
97
+
98
+ {% if suggestions %}
99
+ <div class="mt-8">
100
+ <h3 class="text-xl font-bold mb-4">Personalized Recommendations</h3>
101
+ <div class="space-y-4">
102
+ {% for category, tips in suggestions.items() %}
103
+ <div>
104
+ <h4 class="font-semibold">{{ category }}</h4>
105
+ <ul class="list-disc pl-6 mt-2">
106
+ {% for tip in tips %}
107
+ <li>{{ tip }}</li>
108
+ {% endfor %}
109
+ </ul>
110
+ </div>
111
+ {% endfor %}
112
+ </div>
113
+ </div>
114
+ {% else %}
115
+ <p class="text-center text-gray-600">No recommendations available at the moment.</p>
116
+ {% endif %}
117
+ </div>
118
+ {% endif %}
119
+ </div>
120
+ </body>
121
+ </html>
tests/tests.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import unittest
2
+ import numpy as np
3
+ import pandas as pd
4
+ from src.data_preprocessing import DataPreprocessor
5
+ from src.model_training import ModelTrainer
6
+ from src.prediction import DiabetesPrediction
7
+ from src.health_recommendations import HealthRecommendations
8
+ import os
9
+ import json
10
+
11
+ class TestDataPreprocessor(unittest.TestCase):
12
+ def setUp(self):
13
+ self.preprocessor = DataPreprocessor()
14
+ self.sample_data = pd.DataFrame({
15
+ 'Pregnancies': [1, 2, 3],
16
+ 'Glucose': [85, 0, 90],
17
+ 'BloodPressure': [66, 0, 70],
18
+ 'SkinThickness': [29, 0, 30],
19
+ 'Insulin': [0, 0, 155],
20
+ 'BMI': [26.6, 0, 30.1],
21
+ 'DiabetesPedigreeFunction': [0.351, 0.427, 0.672],
22
+ 'Age': [31, 22, 45],
23
+ 'Outcome': [0, 1, 1]
24
+ })
25
+
26
+ def test_preprocess_data(self):
27
+ processed_df = self.preprocessor.preprocess_data(self.sample_data.copy())
28
+ # Check that there are no zeros in specific columns
29
+ for col in ['Glucose', 'BloodPressure', 'SkinThickness', 'BMI', 'Insulin']:
30
+ self.assertTrue((processed_df[col] != 0).all())
31
+
32
+ def test_scale_features(self):
33
+ processed_df = self.preprocessor.preprocess_data(self.sample_data.copy())
34
+ scaled_features = self.preprocessor.scale_features(processed_df, is_training=True)
35
+ self.assertEqual(scaled_features.shape[1], 8) # All features except Outcome
36
+ self.assertTrue(np.abs(scaled_features.mean()).mean() < 1e-10) # Centered around 0
37
+
38
+ class TestModelTrainer(unittest.TestCase):
39
+ def setUp(self):
40
+ self.trainer = ModelTrainer()
41
+ self.preprocessor = DataPreprocessor()
42
+ # Create sample data
43
+ self.X = np.random.randn(100, 8)
44
+ self.y = np.random.randint(0, 2, 100)
45
+
46
+ def test_train_model(self):
47
+ model = self.trainer.train_model(self.X, self.y)
48
+ self.assertIsNotNone(model)
49
+ # Test prediction shape
50
+ pred = model.predict(self.X[:1])
51
+ self.assertEqual(len(pred), 1)
52
+
53
+ class TestDiabetesPrediction(unittest.TestCase):
54
+ def setUp(self):
55
+ self.predictor = DiabetesPrediction()
56
+ self.sample_input = [1, 85, 66, 29, 0, 26.6, 0.351, 31]
57
+
58
+ def test_prediction_format(self):
59
+ result = self.predictor.predict(self.sample_input)
60
+ self.assertIn('is_diabetic', result)
61
+ self.assertIn('probability', result)
62
+ self.assertIsInstance(result['is_diabetic'], bool)
63
+ self.assertIsInstance(result['probability'], float)
64
+
65
+ class TestHealthRecommendations(unittest.TestCase):
66
+ def setUp(self):
67
+ # Use a dummy API key for testing
68
+ self.health_advisor = HealthRecommendations(api_key="dummy_key")
69
+ self.sample_patient_data = {
70
+ 'Glucose': 85,
71
+ 'BloodPressure': 66,
72
+ 'BMI': 26.6,
73
+ 'Age': 31
74
+ }
75
+ self.sample_prediction = {
76
+ 'is_diabetic': False,
77
+ 'probability': 0.3
78
+ }
79
+
80
+ def test_fallback_recommendations(self):
81
+ recommendations = self.health_advisor._get_fallback_recommendations(is_diabetic=False)
82
+ expected_categories = [
83
+ 'Diet and Nutrition',
84
+ 'Physical Activity',
85
+ 'Lifestyle Changes',
86
+ 'Monitoring and Prevention'
87
+ ]
88
+ self.assertEqual(sorted(recommendations.keys()), sorted(expected_categories))
89
+ for category in expected_categories:
90
+ self.assertGreater(len(recommendations[category]), 0)
91
+
92
+ def run_tests():
93
+ unittest.main()
94
+
95
+ if __name__ == '__main__':
96
+ run_tests()