diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a01fdd05e3db6046195f8c59fcf20c21c9b296b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Programm/elm-stuff/* +Programm/index.html diff --git a/Programm/elm.json b/Programm/elm.json new file mode 100644 index 0000000000000000000000000000000000000000..26cb9c1fd79ba8d1a0a4a87272103e28e684b69b --- /dev/null +++ b/Programm/elm.json @@ -0,0 +1,53 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "avh4/elm-color": "1.0.0", + "elm/browser": "1.0.2", + "elm/core": "1.0.5", + "elm/html": "1.0.0", + "elm/http": "2.0.0", + "elm/parser": "1.1.0", + "elm/time": "1.0.0", + "elm-community/maybe-extra": "5.2.0", + "elm-community/typed-svg": "7.0.0", + "ericgj/elm-csv-decode": "2.0.1", + "gampleman/elm-visualization": "2.3.0", + "hecrj/html-parser": "2.4.0", + "justinmimbs/date": "3.2.1", + "lovasoa/elm-csv": "1.1.7" + }, + "indirect": { + "elm/bytes": "1.0.8", + "elm/file": "1.0.5", + "elm/json": "1.1.3", + "elm/random": "1.0.0", + "elm/svg": "1.0.1", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.2", + "elm-community/list-extra": "8.3.1", + "folkertdev/elm-deque": "3.0.1", + "folkertdev/one-true-path-experiment": "6.0.0", + "folkertdev/svg-path-lowlevel": "4.0.1", + "ianmackenzie/elm-1d-parameter": "1.0.1", + "ianmackenzie/elm-float-extra": "1.1.0", + "ianmackenzie/elm-geometry": "3.9.0", + "ianmackenzie/elm-interval": "2.0.0", + "ianmackenzie/elm-triangular-mesh": "1.1.0", + "ianmackenzie/elm-units": "2.9.0", + "ianmackenzie/elm-units-interval": "2.3.0", + "ianmackenzie/elm-units-prefixed": "2.7.0", + "justinmimbs/time-extra": "1.1.0", + "rtfeldman/elm-hex": "1.0.0", + "ryannhg/date-format": "2.3.0" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} diff --git a/Programm/src/StudentsPerformance.csv b/Programm/src/StudentsPerformance.csv new file mode 100644 index 0000000000000000000000000000000000000000..4fe706363c9a4502bc267410779be4b1ca0bfcf1 --- /dev/null +++ b/Programm/src/StudentsPerformance.csv @@ -0,0 +1,1001 @@ +"gender","race/ethnicity","parental level of education","lunch","test preparation course","math score","reading score","writing score" +"female","group B","bachelor's degree","standard","none","72","72","74" +"female","group C","some college","standard","completed","69","90","88" +"female","group B","master's degree","standard","none","90","95","93" +"male","group A","associate's degree","free/reduced","none","47","57","44" +"male","group C","some college","standard","none","76","78","75" +"female","group B","associate's degree","standard","none","71","83","78" +"female","group B","some college","standard","completed","88","95","92" +"male","group B","some college","free/reduced","none","40","43","39" +"male","group D","high school","free/reduced","completed","64","64","67" +"female","group B","high school","free/reduced","none","38","60","50" +"male","group C","associate's degree","standard","none","58","54","52" +"male","group D","associate's degree","standard","none","40","52","43" +"female","group B","high school","standard","none","65","81","73" +"male","group A","some college","standard","completed","78","72","70" +"female","group A","master's degree","standard","none","50","53","58" +"female","group C","some high school","standard","none","69","75","78" +"male","group C","high school","standard","none","88","89","86" +"female","group B","some high school","free/reduced","none","18","32","28" +"male","group C","master's degree","free/reduced","completed","46","42","46" +"female","group C","associate's degree","free/reduced","none","54","58","61" +"male","group D","high school","standard","none","66","69","63" +"female","group B","some college","free/reduced","completed","65","75","70" +"male","group D","some college","standard","none","44","54","53" +"female","group C","some high school","standard","none","69","73","73" +"male","group D","bachelor's degree","free/reduced","completed","74","71","80" +"male","group A","master's degree","free/reduced","none","73","74","72" +"male","group B","some college","standard","none","69","54","55" +"female","group C","bachelor's degree","standard","none","67","69","75" +"male","group C","high school","standard","none","70","70","65" +"female","group D","master's degree","standard","none","62","70","75" +"female","group D","some college","standard","none","69","74","74" +"female","group B","some college","standard","none","63","65","61" +"female","group E","master's degree","free/reduced","none","56","72","65" +"male","group D","some college","standard","none","40","42","38" +"male","group E","some college","standard","none","97","87","82" +"male","group E","associate's degree","standard","completed","81","81","79" +"female","group D","associate's degree","standard","none","74","81","83" +"female","group D","some high school","free/reduced","none","50","64","59" +"female","group D","associate's degree","free/reduced","completed","75","90","88" +"male","group B","associate's degree","free/reduced","none","57","56","57" +"male","group C","associate's degree","free/reduced","none","55","61","54" +"female","group C","associate's degree","standard","none","58","73","68" +"female","group B","associate's degree","standard","none","53","58","65" +"male","group B","some college","free/reduced","completed","59","65","66" +"female","group E","associate's degree","free/reduced","none","50","56","54" +"male","group B","associate's degree","standard","none","65","54","57" +"female","group A","associate's degree","standard","completed","55","65","62" +"female","group C","high school","standard","none","66","71","76" +"female","group D","associate's degree","free/reduced","completed","57","74","76" +"male","group C","high school","standard","completed","82","84","82" +"male","group E","some college","standard","none","53","55","48" +"male","group E","associate's degree","free/reduced","completed","77","69","68" +"male","group C","some college","standard","none","53","44","42" +"male","group D","high school","standard","none","88","78","75" +"female","group C","some high school","free/reduced","completed","71","84","87" +"female","group C","high school","free/reduced","none","33","41","43" +"female","group E","associate's degree","standard","completed","82","85","86" +"male","group D","associate's degree","standard","none","52","55","49" +"male","group D","some college","standard","completed","58","59","58" +"female","group C","some high school","free/reduced","none","0","17","10" +"male","group E","bachelor's degree","free/reduced","completed","79","74","72" +"male","group A","some high school","free/reduced","none","39","39","34" +"male","group A","associate's degree","free/reduced","none","62","61","55" +"female","group C","associate's degree","standard","none","69","80","71" +"female","group D","some high school","standard","none","59","58","59" +"male","group B","some high school","standard","none","67","64","61" +"male","group D","some high school","free/reduced","none","45","37","37" +"female","group C","some college","standard","none","60","72","74" +"male","group B","associate's degree","free/reduced","none","61","58","56" +"female","group C","associate's degree","standard","none","39","64","57" +"female","group D","some college","free/reduced","completed","58","63","73" +"male","group D","some college","standard","completed","63","55","63" +"female","group A","associate's degree","free/reduced","none","41","51","48" +"male","group C","some high school","free/reduced","none","61","57","56" +"male","group C","some high school","standard","none","49","49","41" +"male","group B","associate's degree","free/reduced","none","44","41","38" +"male","group E","some high school","standard","none","30","26","22" +"male","group A","bachelor's degree","standard","completed","80","78","81" +"female","group D","some high school","standard","completed","61","74","72" +"female","group E","master's degree","standard","none","62","68","68" +"female","group B","associate's degree","standard","none","47","49","50" +"male","group B","high school","free/reduced","none","49","45","45" +"male","group A","some college","free/reduced","completed","50","47","54" +"male","group E","associate's degree","standard","none","72","64","63" +"male","group D","high school","free/reduced","none","42","39","34" +"female","group C","some college","standard","none","73","80","82" +"female","group C","some college","free/reduced","none","76","83","88" +"female","group D","associate's degree","standard","none","71","71","74" +"female","group A","some college","standard","none","58","70","67" +"female","group D","some high school","standard","none","73","86","82" +"female","group C","bachelor's degree","standard","none","65","72","74" +"male","group C","high school","free/reduced","none","27","34","36" +"male","group C","high school","standard","none","71","79","71" +"male","group C","associate's degree","free/reduced","completed","43","45","50" +"female","group B","some college","standard","none","79","86","92" +"male","group C","associate's degree","free/reduced","completed","78","81","82" +"male","group B","some high school","standard","completed","65","66","62" +"female","group E","some college","standard","completed","63","72","70" +"female","group D","some college","free/reduced","none","58","67","62" +"female","group D","bachelor's degree","standard","none","65","67","62" +"male","group B","some college","standard","none","79","67","67" +"male","group D","bachelor's degree","standard","completed","68","74","74" +"female","group D","associate's degree","standard","none","85","91","89" +"male","group B","high school","standard","completed","60","44","47" +"male","group C","some college","standard","completed","98","86","90" +"female","group C","some college","standard","none","58","67","72" +"female","group D","master's degree","standard","none","87","100","100" +"male","group E","associate's degree","standard","completed","66","63","64" +"female","group B","associate's degree","free/reduced","none","52","76","70" +"female","group B","some high school","standard","none","70","64","72" +"female","group D","associate's degree","free/reduced","completed","77","89","98" +"male","group C","high school","standard","none","62","55","49" +"male","group A","associate's degree","standard","none","54","53","47" +"female","group D","some college","standard","none","51","58","54" +"female","group E","bachelor's degree","standard","completed","99","100","100" +"male","group C","high school","standard","none","84","77","74" +"female","group B","bachelor's degree","free/reduced","none","75","85","82" +"female","group D","bachelor's degree","standard","none","78","82","79" +"female","group D","some high school","standard","none","51","63","61" +"female","group C","some college","standard","none","55","69","65" +"female","group C","bachelor's degree","standard","completed","79","92","89" +"male","group B","associate's degree","standard","completed","91","89","92" +"female","group C","some college","standard","completed","88","93","93" +"male","group D","high school","free/reduced","none","63","57","56" +"male","group E","some college","standard","none","83","80","73" +"female","group B","high school","standard","none","87","95","86" +"male","group B","some high school","standard","none","72","68","67" +"male","group D","some college","standard","completed","65","77","74" +"male","group D","master's degree","standard","none","82","82","74" +"female","group A","bachelor's degree","standard","none","51","49","51" +"male","group D","master's degree","standard","none","89","84","82" +"male","group C","some high school","free/reduced","completed","53","37","40" +"male","group E","some college","free/reduced","completed","87","74","70" +"female","group C","some college","standard","completed","75","81","84" +"male","group D","bachelor's degree","free/reduced","completed","74","79","75" +"male","group C","bachelor's degree","standard","none","58","55","48" +"male","group B","some high school","standard","completed","51","54","41" +"male","group E","high school","standard","none","70","55","56" +"female","group C","associate's degree","standard","none","59","66","67" +"male","group D","some college","standard","completed","71","61","69" +"female","group D","some high school","standard","none","76","72","71" +"female","group C","some college","free/reduced","none","59","62","64" +"female","group E","some college","free/reduced","completed","42","55","54" +"male","group A","high school","standard","none","57","43","47" +"male","group D","some college","standard","none","88","73","78" +"female","group C","some college","free/reduced","none","22","39","33" +"male","group B","some high school","standard","none","88","84","75" +"male","group C","associate's degree","free/reduced","none","73","68","66" +"female","group D","bachelor's degree","standard","completed","68","75","81" +"male","group E","associate's degree","free/reduced","completed","100","100","93" +"male","group A","some high school","standard","completed","62","67","69" +"male","group A","bachelor's degree","standard","none","77","67","68" +"female","group B","associate's degree","standard","completed","59","70","66" +"male","group D","bachelor's degree","standard","none","54","49","47" +"male","group D","some high school","standard","none","62","67","61" +"female","group C","some college","standard","completed","70","89","88" +"female","group E","high school","free/reduced","completed","66","74","78" +"male","group B","some college","free/reduced","none","60","60","60" +"female","group B","associate's degree","standard","completed","61","86","87" +"male","group D","associate's degree","free/reduced","none","66","62","64" +"male","group B","associate's degree","free/reduced","completed","82","78","74" +"female","group E","some college","free/reduced","completed","75","88","85" +"male","group B","master's degree","free/reduced","none","49","53","52" +"male","group C","high school","standard","none","52","53","49" +"female","group E","master's degree","standard","none","81","92","91" +"female","group C","bachelor's degree","standard","completed","96","100","100" +"male","group C","high school","free/reduced","completed","53","51","51" +"female","group B","master's degree","free/reduced","completed","58","76","78" +"female","group B","high school","standard","completed","68","83","78" +"female","group C","some college","free/reduced","completed","67","75","70" +"male","group A","high school","standard","completed","72","73","74" +"male","group E","some high school","standard","none","94","88","78" +"female","group D","some college","standard","none","79","86","81" +"female","group C","associate's degree","standard","none","63","67","70" +"female","group C","bachelor's degree","free/reduced","completed","43","51","54" +"female","group C","master's degree","standard","completed","81","91","87" +"female","group B","high school","free/reduced","completed","46","54","58" +"female","group C","associate's degree","standard","completed","71","77","77" +"female","group B","master's degree","free/reduced","completed","52","70","62" +"female","group D","some high school","standard","completed","97","100","100" +"male","group C","master's degree","free/reduced","completed","62","68","75" +"female","group C","some college","free/reduced","none","46","64","66" +"female","group E","high school","standard","none","50","50","47" +"female","group D","associate's degree","standard","none","65","69","70" +"male","group C","some high school","free/reduced","completed","45","52","49" +"male","group C","associate's degree","free/reduced","completed","65","67","65" +"male","group E","high school","standard","none","80","76","65" +"male","group D","some high school","standard","completed","62","66","68" +"male","group B","some high school","free/reduced","none","48","52","45" +"female","group C","bachelor's degree","standard","none","77","88","87" +"female","group E","associate's degree","standard","none","66","65","69" +"male","group D","some college","standard","completed","76","83","79" +"female","group B","some high school","standard","none","62","64","66" +"male","group D","some college","standard","completed","77","62","62" +"female","group C","master's degree","standard","completed","69","84","85" +"male","group D","associate's degree","standard","none","61","55","52" +"male","group C","some high school","free/reduced","completed","59","69","65" +"male","group E","high school","free/reduced","none","55","56","51" +"female","group B","some college","free/reduced","none","45","53","55" +"female","group B","bachelor's degree","free/reduced","none","78","79","76" +"female","group C","associate's degree","standard","completed","67","84","86" +"female","group D","some college","free/reduced","none","65","81","77" +"male","group C","associate's degree","standard","none","69","77","69" +"female","group B","associate's degree","standard","none","57","69","68" +"male","group C","some college","standard","none","59","41","42" +"male","group D","some high school","standard","completed","74","71","78" +"male","group E","bachelor's degree","standard","none","82","62","62" +"male","group E","high school","standard","completed","81","80","76" +"female","group B","some college","free/reduced","none","74","81","76" +"female","group B","some college","free/reduced","none","58","61","66" +"male","group D","some high school","free/reduced","completed","80","79","79" +"male","group C","some college","free/reduced","none","35","28","27" +"female","group C","high school","free/reduced","none","42","62","60" +"male","group C","associate's degree","free/reduced","completed","60","51","56" +"male","group E","high school","standard","completed","87","91","81" +"male","group B","some high school","standard","completed","84","83","75" +"female","group E","associate's degree","free/reduced","completed","83","86","88" +"female","group C","high school","free/reduced","none","34","42","39" +"male","group B","high school","free/reduced","none","66","77","70" +"male","group B","some high school","standard","completed","61","56","56" +"female","group D","high school","standard","completed","56","68","74" +"male","group B","associate's degree","standard","none","87","85","73" +"female","group C","some high school","free/reduced","none","55","65","62" +"male","group D","some high school","standard","none","86","80","75" +"female","group B","associate's degree","standard","completed","52","66","73" +"female","group E","master's degree","free/reduced","none","45","56","54" +"female","group C","some college","standard","none","72","72","71" +"male","group D","high school","standard","none","57","50","54" +"male","group A","some high school","free/reduced","none","68","72","64" +"female","group C","some college","standard","completed","88","95","94" +"male","group D","some college","standard","none","76","64","66" +"male","group C","associate's degree","standard","none","46","43","42" +"female","group B","bachelor's degree","standard","none","67","86","83" +"male","group E","some high school","standard","none","92","87","78" +"male","group C","bachelor's degree","standard","completed","83","82","84" +"male","group D","associate's degree","standard","none","80","75","77" +"male","group D","bachelor's degree","free/reduced","none","63","66","67" +"female","group D","some high school","standard","completed","64","60","74" +"male","group B","some college","standard","none","54","52","51" +"male","group C","associate's degree","standard","none","84","80","80" +"male","group D","high school","free/reduced","completed","73","68","66" +"female","group E","bachelor's degree","standard","none","80","83","83" +"female","group D","high school","standard","none","56","52","55" +"male","group E","some college","standard","none","59","51","43" +"male","group D","some high school","standard","none","75","74","69" +"male","group C","associate's degree","standard","none","85","76","71" +"male","group E","associate's degree","standard","none","89","76","74" +"female","group B","high school","standard","completed","58","70","68" +"female","group B","high school","standard","none","65","64","62" +"male","group C","high school","standard","none","68","60","53" +"male","group A","some high school","standard","completed","47","49","49" +"female","group D","some college","free/reduced","none","71","83","83" +"female","group B","some high school","standard","completed","60","70","70" +"male","group D","master's degree","standard","none","80","80","72" +"male","group D","high school","standard","none","54","52","52" +"female","group E","some college","standard","none","62","73","70" +"female","group C","associate's degree","free/reduced","none","64","73","68" +"male","group C","associate's degree","standard","completed","78","77","77" +"female","group B","some college","standard","none","70","75","78" +"female","group C","master's degree","free/reduced","completed","65","81","81" +"female","group C","some high school","free/reduced","completed","64","79","77" +"male","group C","some college","standard","completed","79","79","78" +"female","group C","some high school","free/reduced","none","44","50","51" +"female","group E","high school","standard","none","99","93","90" +"male","group D","high school","standard","none","76","73","68" +"male","group D","some high school","free/reduced","none","59","42","41" +"female","group C","bachelor's degree","standard","none","63","75","81" +"female","group D","high school","standard","none","69","72","77" +"female","group D","associate's degree","standard","completed","88","92","95" +"female","group E","some college","free/reduced","none","71","76","70" +"male","group C","bachelor's degree","standard","none","69","63","61" +"male","group C","some college","standard","none","58","49","42" +"female","group D","associate's degree","free/reduced","none","47","53","58" +"female","group D","some college","standard","none","65","70","71" +"male","group B","some college","standard","completed","88","85","76" +"male","group C","bachelor's degree","standard","none","83","78","73" +"female","group C","some high school","standard","completed","85","92","93" +"female","group E","high school","standard","completed","59","63","75" +"female","group C","some high school","free/reduced","none","65","86","80" +"male","group B","bachelor's degree","free/reduced","none","73","56","57" +"male","group D","high school","standard","none","53","52","42" +"male","group D","high school","standard","none","45","48","46" +"female","group D","bachelor's degree","free/reduced","none","73","79","84" +"female","group D","some college","free/reduced","completed","70","78","78" +"female","group B","some high school","standard","none","37","46","46" +"male","group B","associate's degree","standard","completed","81","82","82" +"male","group E","associate's degree","standard","completed","97","82","88" +"female","group B","some high school","standard","none","67","89","82" +"male","group B","bachelor's degree","free/reduced","none","88","75","76" +"male","group E","some high school","standard","completed","77","76","77" +"male","group C","associate's degree","standard","none","76","70","68" +"male","group D","some high school","standard","none","86","73","70" +"male","group C","some high school","standard","completed","63","60","57" +"female","group E","bachelor's degree","standard","none","65","73","75" +"male","group D","high school","free/reduced","completed","78","77","80" +"male","group B","associate's degree","free/reduced","none","67","62","60" +"male","group A","some high school","standard","completed","46","41","43" +"male","group E","associate's degree","standard","completed","71","74","68" +"male","group C","high school","free/reduced","completed","40","46","50" +"male","group D","associate's degree","free/reduced","none","90","87","75" +"male","group A","some college","free/reduced","completed","81","78","81" +"male","group D","some high school","free/reduced","none","56","54","52" +"female","group C","associate's degree","standard","completed","67","84","81" +"male","group B","associate's degree","standard","none","80","76","64" +"female","group C","associate's degree","standard","completed","74","75","83" +"male","group A","some college","standard","none","69","67","69" +"male","group E","some college","standard","completed","99","87","81" +"male","group C","some high school","standard","none","51","52","44" +"female","group B","associate's degree","free/reduced","none","53","71","67" +"female","group D","high school","free/reduced","none","49","57","52" +"female","group B","associate's degree","standard","none","73","76","80" +"male","group B","bachelor's degree","standard","none","66","60","57" +"male","group D","bachelor's degree","standard","completed","67","61","68" +"female","group C","associate's degree","free/reduced","completed","68","67","69" +"female","group C","bachelor's degree","standard","completed","59","64","75" +"male","group C","high school","standard","none","71","66","65" +"female","group D","master's degree","standard","completed","77","82","91" +"male","group C","associate's degree","standard","none","83","72","78" +"male","group B","bachelor's degree","standard","none","63","71","69" +"female","group D","associate's degree","free/reduced","none","56","65","63" +"female","group C","high school","free/reduced","completed","67","79","84" +"female","group E","high school","standard","none","75","86","79" +"female","group C","some college","standard","none","71","81","80" +"female","group C","some high school","free/reduced","none","43","53","53" +"female","group C","high school","free/reduced","none","41","46","43" +"female","group C","some college","standard","none","82","90","94" +"male","group C","some college","standard","none","61","61","62" +"male","group A","some college","free/reduced","none","28","23","19" +"male","group C","associate's degree","standard","completed","82","75","77" +"female","group B","some high school","standard","none","41","55","51" +"male","group C","high school","standard","none","71","60","61" +"male","group C","associate's degree","standard","none","47","37","35" +"male","group E","associate's degree","standard","completed","62","56","53" +"male","group B","associate's degree","standard","none","90","78","81" +"female","group C","bachelor's degree","standard","none","83","93","95" +"female","group B","some college","free/reduced","none","61","68","66" +"male","group D","some high school","standard","completed","76","70","69" +"male","group C","associate's degree","standard","none","49","51","43" +"female","group B","some high school","free/reduced","none","24","38","27" +"female","group D","some high school","free/reduced","completed","35","55","60" +"male","group C","high school","free/reduced","none","58","61","52" +"female","group C","high school","standard","none","61","73","63" +"female","group B","high school","standard","completed","69","76","74" +"male","group D","associate's degree","standard","completed","67","72","67" +"male","group D","some college","standard","none","79","73","67" +"female","group C","high school","standard","none","72","80","75" +"male","group B","some college","standard","none","62","61","57" +"female","group C","bachelor's degree","standard","completed","77","94","95" +"male","group D","high school","free/reduced","none","75","74","66" +"male","group E","associate's degree","standard","none","87","74","76" +"female","group B","bachelor's degree","standard","none","52","65","69" +"male","group E","some college","standard","none","66","57","52" +"female","group C","some college","standard","completed","63","78","80" +"female","group C","associate's degree","standard","none","46","58","57" +"female","group C","some college","standard","none","59","71","70" +"female","group B","bachelor's degree","standard","none","61","72","70" +"male","group A","associate's degree","standard","none","63","61","61" +"female","group C","some college","free/reduced","completed","42","66","69" +"male","group D","some college","free/reduced","none","59","62","61" +"female","group D","some college","standard","none","80","90","89" +"female","group B","high school","standard","none","58","62","59" +"male","group B","some high school","standard","completed","85","84","78" +"female","group C","some college","standard","none","52","58","58" +"female","group D","some high school","free/reduced","none","27","34","32" +"male","group C","some college","standard","none","59","60","58" +"male","group A","bachelor's degree","free/reduced","completed","49","58","60" +"male","group C","high school","standard","completed","69","58","53" +"male","group C","bachelor's degree","free/reduced","none","61","66","61" +"female","group A","some high school","free/reduced","none","44","64","58" +"female","group D","some high school","standard","none","73","84","85" +"male","group E","some college","standard","none","84","77","71" +"female","group C","some college","free/reduced","completed","45","73","70" +"male","group D","some high school","standard","none","74","74","72" +"female","group D","some college","standard","completed","82","97","96" +"female","group D","bachelor's degree","standard","none","59","70","73" +"male","group E","associate's degree","free/reduced","none","46","43","41" +"female","group D","some high school","standard","none","80","90","82" +"female","group D","master's degree","free/reduced","completed","85","95","100" +"female","group A","some high school","standard","none","71","83","77" +"male","group A","bachelor's degree","standard","none","66","64","62" +"female","group B","associate's degree","standard","none","80","86","83" +"male","group C","associate's degree","standard","completed","87","100","95" +"male","group C","master's degree","free/reduced","none","79","81","71" +"female","group E","some high school","free/reduced","none","38","49","45" +"female","group A","some high school","free/reduced","none","38","43","43" +"female","group E","some college","standard","none","67","76","75" +"female","group E","bachelor's degree","standard","none","64","73","70" +"female","group C","associate's degree","free/reduced","none","57","78","67" +"female","group D","high school","standard","none","62","64","64" +"male","group D","master's degree","standard","none","73","70","75" +"male","group E","some high school","free/reduced","completed","73","67","59" +"female","group D","some college","standard","none","77","68","77" +"male","group E","some college","standard","none","76","67","67" +"male","group C","associate's degree","standard","completed","57","54","56" +"female","group C","some high school","standard","completed","65","74","77" +"male","group A","high school","free/reduced","none","48","45","41" +"female","group B","high school","free/reduced","none","50","67","63" +"female","group C","associate's degree","standard","none","85","89","95" +"male","group B","some high school","standard","none","74","63","57" +"male","group D","some high school","standard","none","60","59","54" +"female","group C","some high school","standard","completed","59","54","67" +"male","group A","some college","standard","none","53","43","43" +"female","group A","some college","free/reduced","none","49","65","55" +"female","group D","high school","standard","completed","88","99","100" +"female","group C","high school","standard","none","54","59","62" +"female","group C","some high school","standard","none","63","73","68" +"male","group B","associate's degree","standard","completed","65","65","63" +"female","group B","associate's degree","standard","none","82","80","77" +"female","group D","high school","free/reduced","completed","52","57","56" +"male","group D","associate's degree","standard","completed","87","84","85" +"female","group D","master's degree","standard","completed","70","71","74" +"male","group E","some college","standard","completed","84","83","78" +"male","group D","associate's degree","standard","none","71","66","60" +"male","group B","some high school","standard","completed","63","67","67" +"female","group C","bachelor's degree","free/reduced","completed","51","72","79" +"male","group E","high school","standard","none","84","73","69" +"male","group C","bachelor's degree","standard","completed","71","74","68" +"male","group C","associate's degree","standard","none","74","73","67" +"male","group D","some college","standard","none","68","59","62" +"male","group E","high school","free/reduced","completed","57","56","54" +"female","group C","associate's degree","free/reduced","completed","82","93","93" +"female","group D","high school","standard","completed","57","58","64" +"female","group D","master's degree","free/reduced","completed","47","58","67" +"female","group A","some high school","standard","completed","59","85","80" +"male","group B","some college","free/reduced","none","41","39","34" +"female","group C","some college","free/reduced","none","62","67","62" +"male","group C","bachelor's degree","standard","none","86","83","86" +"male","group C","some high school","free/reduced","none","69","71","65" +"male","group A","some high school","free/reduced","none","65","59","53" +"male","group C","some high school","free/reduced","none","68","63","54" +"male","group C","associate's degree","free/reduced","none","64","66","59" +"female","group C","high school","standard","none","61","72","70" +"male","group C","high school","standard","none","61","56","55" +"female","group A","some high school","free/reduced","none","47","59","50" +"male","group C","some high school","standard","none","73","66","66" +"male","group C","some college","free/reduced","completed","50","48","53" +"male","group D","associate's degree","standard","none","75","68","64" +"male","group D","associate's degree","free/reduced","none","75","66","73" +"male","group C","high school","standard","none","70","56","51" +"male","group D","some high school","standard","completed","89","88","82" +"female","group C","some college","standard","completed","67","81","79" +"female","group D","high school","standard","none","78","81","80" +"female","group A","some high school","free/reduced","none","59","73","69" +"female","group B","associate's degree","standard","none","73","83","76" +"male","group A","some high school","free/reduced","none","79","82","73" +"female","group C","some high school","standard","completed","67","74","77" +"male","group D","some college","free/reduced","none","69","66","60" +"male","group C","high school","standard","completed","86","81","80" +"male","group B","high school","standard","none","47","46","42" +"male","group B","associate's degree","standard","none","81","73","72" +"female","group C","some college","free/reduced","completed","64","85","85" +"female","group E","some college","standard","none","100","92","97" +"female","group C","associate's degree","free/reduced","none","65","77","74" +"male","group C","some college","free/reduced","none","65","58","49" +"female","group C","associate's degree","free/reduced","none","53","61","62" +"male","group C","bachelor's degree","free/reduced","none","37","56","47" +"female","group D","bachelor's degree","standard","none","79","89","89" +"male","group D","associate's degree","free/reduced","none","53","54","48" +"female","group E","bachelor's degree","standard","none","100","100","100" +"male","group B","high school","standard","completed","72","65","68" +"male","group C","bachelor's degree","free/reduced","none","53","58","55" +"male","group B","some college","free/reduced","none","54","54","45" +"female","group E","some college","standard","none","71","70","76" +"female","group C","some college","free/reduced","none","77","90","91" +"male","group A","bachelor's degree","standard","completed","75","58","62" +"female","group C","some college","standard","none","84","87","91" +"female","group D","associate's degree","free/reduced","none","26","31","38" +"male","group A","high school","free/reduced","completed","72","67","65" +"female","group A","high school","free/reduced","completed","77","88","85" +"male","group C","some college","standard","none","91","74","76" +"female","group C","associate's degree","standard","completed","83","85","90" +"female","group C","high school","standard","none","63","69","74" +"female","group C","associate's degree","standard","completed","68","86","84" +"female","group D","some high school","standard","none","59","67","61" +"female","group B","associate's degree","standard","completed","90","90","91" +"female","group D","bachelor's degree","standard","completed","71","76","83" +"male","group E","bachelor's degree","standard","completed","76","62","66" +"male","group D","associate's degree","standard","none","80","68","72" +"female","group D","master's degree","standard","none","55","64","70" +"male","group E","associate's degree","standard","none","76","71","67" +"male","group B","high school","standard","completed","73","71","68" +"female","group D","associate's degree","free/reduced","none","52","59","56" +"male","group C","some college","free/reduced","none","68","68","61" +"male","group A","high school","standard","none","59","52","46" +"female","group B","associate's degree","standard","none","49","52","54" +"male","group C","high school","standard","none","70","74","71" +"male","group D","some college","free/reduced","none","61","47","56" +"female","group C","associate's degree","free/reduced","none","60","75","74" +"male","group B","some high school","standard","completed","64","53","57" +"male","group A","associate's degree","free/reduced","completed","79","82","82" +"female","group A","associate's degree","free/reduced","none","65","85","76" +"female","group C","associate's degree","standard","none","64","64","70" +"female","group C","some college","standard","none","83","83","90" +"female","group C","bachelor's degree","standard","none","81","88","90" +"female","group B","high school","standard","none","54","64","68" +"male","group D","high school","standard","completed","68","64","66" +"female","group C","some college","standard","none","54","48","52" +"female","group D","some college","free/reduced","completed","59","78","76" +"female","group B","some high school","standard","none","66","69","68" +"male","group E","some college","standard","none","76","71","72" +"female","group D","master's degree","standard","none","74","79","82" +"female","group B","associate's degree","standard","completed","94","87","92" +"male","group C","some college","free/reduced","none","63","61","54" +"female","group E","associate's degree","standard","completed","95","89","92" +"female","group D","master's degree","free/reduced","none","40","59","54" +"female","group B","some high school","standard","none","82","82","80" +"male","group A","high school","standard","none","68","70","66" +"male","group B","bachelor's degree","free/reduced","none","55","59","54" +"male","group C","master's degree","standard","none","79","78","77" +"female","group C","bachelor's degree","standard","none","86","92","87" +"male","group D","some college","standard","none","76","71","73" +"male","group A","some high school","standard","none","64","50","43" +"male","group D","some high school","free/reduced","none","62","49","52" +"female","group B","some high school","standard","completed","54","61","62" +"female","group B","master's degree","free/reduced","completed","77","97","94" +"female","group C","some high school","standard","completed","76","87","85" +"female","group D","some college","standard","none","74","89","84" +"female","group E","some college","standard","completed","66","74","73" +"female","group D","some high school","standard","completed","66","78","78" +"female","group B","high school","free/reduced","completed","67","78","79" +"male","group D","some college","standard","none","71","49","52" +"female","group C","associate's degree","standard","none","91","86","84" +"male","group D","bachelor's degree","standard","none","69","58","57" +"male","group C","master's degree","free/reduced","none","54","59","50" +"male","group C","high school","standard","completed","53","52","49" +"male","group E","some college","standard","none","68","60","59" +"male","group C","some high school","free/reduced","completed","56","61","60" +"female","group C","high school","free/reduced","none","36","53","43" +"female","group D","bachelor's degree","free/reduced","none","29","41","47" +"female","group C","associate's degree","standard","none","62","74","70" +"female","group C","associate's degree","standard","completed","68","67","73" +"female","group C","some high school","standard","none","47","54","53" +"male","group E","associate's degree","standard","completed","62","61","58" +"female","group E","associate's degree","standard","completed","79","88","94" +"male","group B","high school","standard","completed","73","69","68" +"female","group C","bachelor's degree","free/reduced","completed","66","83","83" +"male","group C","associate's degree","standard","completed","51","60","58" +"female","group D","high school","standard","none","51","66","62" +"male","group E","bachelor's degree","standard","completed","85","66","71" +"male","group A","associate's degree","standard","completed","97","92","86" +"male","group C","high school","standard","completed","75","69","68" +"male","group D","associate's degree","free/reduced","completed","79","82","80" +"female","group C","associate's degree","standard","none","81","77","79" +"female","group D","associate's degree","standard","none","82","95","89" +"female","group D","master's degree","standard","none","64","63","66" +"male","group E","some high school","free/reduced","completed","78","83","80" +"female","group A","some high school","standard","completed","92","100","97" +"male","group C","high school","standard","completed","72","67","64" +"female","group C","high school","free/reduced","none","62","67","64" +"male","group C","master's degree","standard","none","79","72","69" +"male","group C","some high school","free/reduced","none","79","76","65" +"male","group B","bachelor's degree","free/reduced","completed","87","90","88" +"female","group B","associate's degree","standard","none","40","48","50" +"male","group D","some college","free/reduced","none","77","62","64" +"male","group E","associate's degree","standard","none","53","45","40" +"female","group C","some college","free/reduced","none","32","39","33" +"female","group C","associate's degree","standard","completed","55","72","79" +"male","group C","master's degree","free/reduced","none","61","67","66" +"female","group B","associate's degree","free/reduced","none","53","70","70" +"male","group D","some high school","standard","none","73","66","62" +"female","group D","some college","standard","completed","74","75","79" +"female","group C","some college","standard","none","63","74","74" +"male","group C","bachelor's degree","standard","completed","96","90","92" +"female","group D","some college","free/reduced","completed","63","80","80" +"male","group B","bachelor's degree","free/reduced","none","48","51","46" +"male","group B","associate's degree","standard","none","48","43","45" +"female","group E","bachelor's degree","free/reduced","completed","92","100","100" +"female","group D","master's degree","free/reduced","completed","61","71","78" +"male","group B","high school","free/reduced","none","63","48","47" +"male","group D","bachelor's degree","free/reduced","none","68","68","67" +"male","group B","some college","standard","completed","71","75","70" +"male","group A","bachelor's degree","standard","none","91","96","92" +"female","group C","some college","standard","none","53","62","56" +"female","group C","high school","free/reduced","completed","50","66","64" +"female","group E","high school","standard","none","74","81","71" +"male","group A","associate's degree","free/reduced","completed","40","55","53" +"male","group A","some college","standard","completed","61","51","52" +"female","group B","high school","standard","none","81","91","89" +"female","group B","some college","free/reduced","completed","48","56","58" +"female","group D","master's degree","standard","none","53","61","68" +"female","group D","some high school","standard","none","81","97","96" +"female","group E","some high school","standard","none","77","79","80" +"female","group D","bachelor's degree","free/reduced","none","63","73","78" +"female","group D","associate's degree","standard","completed","73","75","80" +"female","group D","some college","standard","none","69","77","77" +"female","group C","associate's degree","standard","none","65","76","76" +"female","group A","high school","standard","none","55","73","73" +"female","group C","bachelor's degree","free/reduced","none","44","63","62" +"female","group C","some college","standard","none","54","64","65" +"female","group A","some high school","standard","none","48","66","65" +"male","group C","some college","free/reduced","none","58","57","54" +"male","group A","some high school","standard","none","71","62","50" +"male","group E","bachelor's degree","standard","none","68","68","64" +"female","group E","high school","standard","none","74","76","73" +"female","group C","bachelor's degree","standard","completed","92","100","99" +"female","group C","bachelor's degree","standard","completed","56","79","72" +"male","group B","high school","free/reduced","none","30","24","15" +"male","group A","some high school","standard","none","53","54","48" +"female","group D","high school","standard","none","69","77","73" +"female","group D","some high school","standard","none","65","82","81" +"female","group D","master's degree","standard","none","54","60","63" +"female","group C","high school","standard","none","29","29","30" +"female","group E","some college","standard","none","76","78","80" +"male","group D","high school","free/reduced","none","60","57","51" +"male","group D","master's degree","free/reduced","completed","84","89","90" +"male","group C","some high school","standard","none","75","72","62" +"female","group C","associate's degree","standard","none","85","84","82" +"female","group C","master's degree","free/reduced","none","40","58","54" +"female","group E","some college","standard","none","61","64","62" +"female","group B","associate's degree","standard","none","58","63","65" +"male","group D","some college","free/reduced","completed","69","60","63" +"female","group C","some college","standard","none","58","59","66" +"male","group C","bachelor's degree","standard","completed","94","90","91" +"female","group C","associate's degree","standard","none","65","77","74" +"female","group A","associate's degree","standard","none","82","93","93" +"female","group C","high school","standard","none","60","68","72" +"female","group E","bachelor's degree","standard","none","37","45","38" +"male","group D","bachelor's degree","standard","none","88","78","83" +"male","group D","master's degree","standard","none","95","81","84" +"male","group C","associate's degree","free/reduced","completed","65","73","68" +"female","group C","high school","free/reduced","none","35","61","54" +"male","group B","bachelor's degree","free/reduced","none","62","63","56" +"male","group C","high school","free/reduced","completed","58","51","52" +"male","group A","some college","standard","completed","100","96","86" +"female","group E","bachelor's degree","free/reduced","none","61","58","62" +"male","group D","some college","standard","completed","100","97","99" +"male","group B","associate's degree","free/reduced","completed","69","70","63" +"male","group D","associate's degree","standard","none","61","48","46" +"male","group D","some college","free/reduced","none","49","57","46" +"female","group C","some high school","standard","completed","44","51","55" +"male","group D","some college","standard","none","67","64","70" +"male","group B","high school","standard","none","79","60","65" +"female","group B","bachelor's degree","standard","completed","66","74","81" +"female","group C","high school","standard","none","75","88","85" +"male","group D","some high school","standard","none","84","84","80" +"male","group A","high school","standard","none","71","74","64" +"female","group B","high school","free/reduced","completed","67","80","81" +"female","group D","some high school","standard","completed","80","92","88" +"male","group E","some college","standard","none","86","76","74" +"female","group D","associate's degree","standard","none","76","74","73" +"male","group D","high school","standard","none","41","52","51" +"female","group D","associate's degree","free/reduced","completed","74","88","90" +"female","group B","some high school","free/reduced","none","72","81","79" +"female","group E","high school","standard","completed","74","79","80" +"male","group B","high school","standard","none","70","65","60" +"female","group B","bachelor's degree","standard","completed","65","81","81" +"female","group D","associate's degree","standard","none","59","70","65" +"female","group E","high school","free/reduced","none","64","62","68" +"female","group B","high school","standard","none","50","53","55" +"female","group D","some college","standard","completed","69","79","81" +"male","group C","some high school","free/reduced","completed","51","56","53" +"female","group A","high school","standard","completed","68","80","76" +"female","group D","some college","standard","completed","85","86","98" +"female","group A","associate's degree","standard","completed","65","70","74" +"female","group B","some high school","standard","none","73","79","79" +"female","group B","some college","standard","none","62","67","67" +"male","group C","associate's degree","free/reduced","none","77","67","64" +"male","group D","some high school","standard","none","69","66","61" +"female","group D","associate's degree","free/reduced","none","43","60","58" +"male","group D","associate's degree","standard","none","90","87","85" +"male","group C","some college","free/reduced","none","74","77","73" +"male","group C","some high school","standard","none","73","66","63" +"female","group D","some college","free/reduced","none","55","71","69" +"female","group C","high school","standard","none","65","69","67" +"male","group D","associate's degree","standard","none","80","63","63" +"female","group C","some high school","free/reduced","completed","50","60","60" +"female","group C","some college","free/reduced","completed","63","73","71" +"female","group B","bachelor's degree","free/reduced","none","77","85","87" +"male","group C","some college","standard","none","73","74","61" +"male","group D","associate's degree","standard","completed","81","72","77" +"female","group C","high school","free/reduced","none","66","76","68" +"male","group D","associate's degree","free/reduced","none","52","57","50" +"female","group C","some college","standard","none","69","78","76" +"female","group C","associate's degree","standard","completed","65","84","84" +"female","group D","high school","standard","completed","69","77","78" +"female","group B","some college","standard","completed","50","64","66" +"female","group E","some college","standard","completed","73","78","76" +"female","group C","some high school","standard","completed","70","82","76" +"male","group D","associate's degree","free/reduced","none","81","75","78" +"male","group D","some college","free/reduced","none","63","61","60" +"female","group D","high school","standard","none","67","72","74" +"male","group B","high school","standard","none","60","68","60" +"male","group B","high school","standard","none","62","55","54" +"female","group C","some high school","free/reduced","completed","29","40","44" +"male","group B","some college","standard","completed","62","66","68" +"female","group E","master's degree","standard","completed","94","99","100" +"male","group E","some college","standard","completed","85","75","68" +"male","group D","associate's degree","free/reduced","none","77","78","73" +"male","group A","high school","free/reduced","none","53","58","44" +"male","group E","some college","free/reduced","none","93","90","83" +"female","group C","associate's degree","standard","none","49","53","53" +"female","group E","associate's degree","free/reduced","none","73","76","78" +"female","group C","bachelor's degree","free/reduced","completed","66","74","81" +"female","group D","associate's degree","standard","none","77","77","73" +"female","group C","some high school","standard","none","49","63","56" +"female","group D","some college","free/reduced","none","79","89","86" +"female","group C","associate's degree","standard","completed","75","82","90" +"female","group A","bachelor's degree","standard","none","59","72","70" +"female","group D","associate's degree","standard","completed","57","78","79" +"male","group C","high school","free/reduced","none","66","66","59" +"female","group E","bachelor's degree","standard","completed","79","81","82" +"female","group B","some high school","standard","none","57","67","72" +"male","group A","bachelor's degree","standard","completed","87","84","87" +"female","group D","some college","standard","none","63","64","67" +"female","group B","some high school","free/reduced","completed","59","63","64" +"male","group A","bachelor's degree","free/reduced","none","62","72","65" +"male","group D","high school","standard","none","46","34","36" +"male","group C","some college","standard","none","66","59","52" +"male","group D","high school","standard","none","89","87","79" +"female","group D","associate's degree","free/reduced","completed","42","61","58" +"male","group C","some college","standard","completed","93","84","90" +"female","group E","some high school","standard","completed","80","85","85" +"female","group D","some college","standard","none","98","100","99" +"male","group D","master's degree","standard","none","81","81","84" +"female","group B","some high school","standard","completed","60","70","74" +"female","group B","associate's degree","free/reduced","completed","76","94","87" +"male","group C","associate's degree","standard","completed","73","78","72" +"female","group C","associate's degree","standard","completed","96","96","99" +"female","group C","high school","standard","none","76","76","74" +"male","group E","associate's degree","free/reduced","completed","91","73","80" +"female","group C","some college","free/reduced","none","62","72","70" +"male","group D","some high school","free/reduced","completed","55","59","59" +"female","group B","some high school","free/reduced","completed","74","90","88" +"male","group C","high school","standard","none","50","48","42" +"male","group B","some college","standard","none","47","43","41" +"male","group E","some college","standard","completed","81","74","71" +"female","group E","associate's degree","standard","completed","65","75","77" +"male","group E","some high school","standard","completed","68","51","57" +"female","group D","high school","free/reduced","none","73","92","84" +"male","group C","some college","standard","none","53","39","37" +"female","group B","associate's degree","free/reduced","completed","68","77","80" +"male","group A","some high school","free/reduced","none","55","46","43" +"female","group C","some college","standard","completed","87","89","94" +"male","group D","some high school","standard","none","55","47","44" +"female","group E","some college","free/reduced","none","53","58","57" +"male","group C","master's degree","standard","none","67","57","59" +"male","group C","associate's degree","standard","none","92","79","84" +"female","group B","some college","free/reduced","completed","53","66","73" +"male","group D","associate's degree","standard","none","81","71","73" +"male","group C","high school","free/reduced","none","61","60","55" +"male","group D","bachelor's degree","standard","none","80","73","72" +"female","group A","associate's degree","free/reduced","none","37","57","56" +"female","group C","high school","standard","none","81","84","82" +"female","group C","associate's degree","standard","completed","59","73","72" +"male","group B","some college","free/reduced","none","55","55","47" +"male","group D","associate's degree","standard","none","72","79","74" +"male","group D","high school","standard","none","69","75","71" +"male","group C","some college","standard","none","69","64","68" +"female","group C","bachelor's degree","free/reduced","none","50","60","59" +"male","group B","some college","standard","completed","87","84","86" +"male","group D","some high school","standard","completed","71","69","68" +"male","group E","some college","standard","none","68","72","65" +"male","group C","master's degree","free/reduced","completed","79","77","75" +"female","group C","some high school","standard","completed","77","90","85" +"male","group C","associate's degree","free/reduced","none","58","55","53" +"female","group E","associate's degree","standard","none","84","95","92" +"male","group D","some college","standard","none","55","58","52" +"male","group E","bachelor's degree","free/reduced","completed","70","68","72" +"female","group D","some college","free/reduced","completed","52","59","65" +"male","group B","some college","standard","completed","69","77","77" +"female","group C","high school","free/reduced","none","53","72","64" +"female","group D","some high school","standard","none","48","58","54" +"male","group D","some high school","standard","completed","78","81","86" +"female","group B","high school","standard","none","62","62","63" +"male","group D","some college","standard","none","60","63","59" +"female","group B","high school","standard","none","74","72","72" +"female","group C","high school","standard","completed","58","75","77" +"male","group B","high school","standard","completed","76","62","60" +"female","group D","some high school","standard","none","68","71","75" +"male","group A","some college","free/reduced","none","58","60","57" +"male","group B","high school","standard","none","52","48","49" +"male","group D","bachelor's degree","standard","none","75","73","74" +"female","group B","some high school","free/reduced","completed","52","67","72" +"female","group C","bachelor's degree","free/reduced","none","62","78","79" +"male","group B","some college","standard","none","66","65","60" +"female","group B","some high school","free/reduced","none","49","58","55" +"female","group B","high school","standard","none","66","72","70" +"female","group C","some college","free/reduced","none","35","44","43" +"female","group A","some college","standard","completed","72","79","82" +"male","group E","associate's degree","standard","completed","94","85","82" +"female","group D","associate's degree","free/reduced","none","46","56","57" +"female","group B","master's degree","standard","none","77","90","84" +"female","group B","high school","free/reduced","completed","76","85","82" +"female","group C","associate's degree","standard","completed","52","59","62" +"male","group C","bachelor's degree","standard","completed","91","81","79" +"female","group B","some high school","standard","completed","32","51","44" +"female","group E","some high school","free/reduced","none","72","79","77" +"female","group B","some college","standard","none","19","38","32" +"male","group C","associate's degree","free/reduced","none","68","65","61" +"female","group C","master's degree","free/reduced","none","52","65","61" +"female","group B","high school","standard","none","48","62","60" +"female","group D","some college","free/reduced","none","60","66","70" +"male","group D","high school","free/reduced","none","66","74","69" +"male","group E","some high school","standard","completed","89","84","77" +"female","group B","high school","standard","none","42","52","51" +"female","group E","associate's degree","free/reduced","completed","57","68","73" +"male","group D","high school","standard","none","70","70","70" +"female","group E","associate's degree","free/reduced","none","70","84","81" +"male","group E","some college","standard","none","69","60","54" +"female","group C","associate's degree","standard","none","52","55","57" +"male","group C","some high school","standard","completed","67","73","68" +"male","group C","some high school","standard","completed","76","80","73" +"female","group E","associate's degree","standard","none","87","94","95" +"female","group B","some college","standard","none","82","85","87" +"female","group C","some college","standard","none","73","76","78" +"male","group A","some college","free/reduced","none","75","81","74" +"female","group D","some college","free/reduced","none","64","74","75" +"female","group E","high school","free/reduced","none","41","45","40" +"male","group C","high school","standard","none","90","75","69" +"male","group B","bachelor's degree","standard","none","59","54","51" +"male","group A","some high school","standard","none","51","31","36" +"male","group A","high school","free/reduced","none","45","47","49" +"female","group C","master's degree","standard","completed","54","64","67" +"male","group E","some high school","standard","completed","87","84","76" +"female","group C","high school","standard","none","72","80","83" +"male","group B","some high school","standard","completed","94","86","87" +"female","group A","bachelor's degree","standard","none","45","59","64" +"male","group D","bachelor's degree","free/reduced","completed","61","70","76" +"female","group B","high school","free/reduced","none","60","72","68" +"female","group C","some high school","standard","none","77","91","88" +"female","group A","some high school","standard","completed","85","90","92" +"female","group D","bachelor's degree","free/reduced","none","78","90","93" +"male","group E","some college","free/reduced","completed","49","52","51" +"female","group B","high school","free/reduced","none","71","87","82" +"female","group C","some high school","free/reduced","none","48","58","52" +"male","group C","high school","standard","none","62","67","58" +"female","group C","associate's degree","free/reduced","completed","56","68","70" +"female","group C","some high school","standard","none","65","69","76" +"female","group D","some high school","free/reduced","completed","69","86","81" +"male","group B","some high school","standard","none","68","54","53" +"female","group A","some college","free/reduced","none","61","60","57" +"female","group C","bachelor's degree","free/reduced","completed","74","86","89" +"male","group A","bachelor's degree","standard","none","64","60","58" +"female","group B","high school","standard","completed","77","82","89" +"male","group B","some college","standard","none","58","50","45" +"female","group C","high school","standard","completed","60","64","74" +"male","group E","high school","standard","none","73","64","57" +"female","group A","high school","standard","completed","75","82","79" +"male","group B","associate's degree","free/reduced","completed","58","57","53" +"female","group C","associate's degree","standard","none","66","77","73" +"female","group D","high school","free/reduced","none","39","52","46" +"male","group C","some high school","standard","none","64","58","51" +"female","group B","high school","free/reduced","completed","23","44","36" +"male","group B","some college","free/reduced","completed","74","77","76" +"female","group D","some high school","free/reduced","completed","40","65","64" +"male","group E","master's degree","standard","none","90","85","84" +"male","group C","master's degree","standard","completed","91","85","85" +"male","group D","high school","standard","none","64","54","50" +"female","group C","high school","standard","none","59","72","68" +"male","group D","associate's degree","standard","none","80","75","69" +"male","group C","master's degree","standard","none","71","67","67" +"female","group A","high school","standard","none","61","68","63" +"female","group E","some college","standard","none","87","85","93" +"male","group E","some high school","standard","none","82","67","61" +"male","group C","some high school","standard","none","62","64","55" +"female","group B","bachelor's degree","standard","none","97","97","96" +"male","group B","some college","free/reduced","none","75","68","65" +"female","group C","bachelor's degree","standard","none","65","79","81" +"male","group B","high school","standard","completed","52","49","46" +"male","group C","associate's degree","free/reduced","none","87","73","72" +"female","group C","associate's degree","standard","none","53","62","53" +"female","group E","master's degree","free/reduced","none","81","86","87" +"male","group D","bachelor's degree","free/reduced","completed","39","42","38" +"female","group C","some college","standard","completed","71","71","80" +"male","group C","associate's degree","standard","none","97","93","91" +"male","group D","some college","standard","completed","82","82","88" +"male","group C","high school","free/reduced","none","59","53","52" +"male","group B","associate's degree","standard","none","61","42","41" +"male","group E","associate's degree","free/reduced","completed","78","74","72" +"male","group C","associate's degree","free/reduced","none","49","51","51" +"male","group B","high school","standard","none","59","58","47" +"female","group C","some college","standard","completed","70","72","76" +"male","group B","associate's degree","standard","completed","82","84","78" +"male","group E","associate's degree","free/reduced","none","90","90","82" +"female","group C","bachelor's degree","free/reduced","none","43","62","61" +"male","group C","some college","free/reduced","none","80","64","66" +"male","group D","some college","standard","none","81","82","84" +"male","group C","some high school","standard","none","57","61","54" +"female","group D","some high school","standard","none","59","72","80" +"female","group D","associate's degree","standard","none","64","76","74" +"male","group C","bachelor's degree","standard","completed","63","64","66" +"female","group E","bachelor's degree","standard","completed","71","70","70" +"female","group B","high school","free/reduced","none","64","73","71" +"male","group D","bachelor's degree","free/reduced","none","55","46","44" +"female","group E","associate's degree","standard","none","51","51","54" +"female","group C","associate's degree","standard","completed","62","76","80" +"female","group E","associate's degree","standard","completed","93","100","95" +"male","group C","high school","free/reduced","none","54","72","59" +"female","group D","some college","free/reduced","none","69","65","74" +"male","group D","high school","free/reduced","none","44","51","48" +"female","group E","some college","standard","completed","86","85","91" +"female","group E","associate's degree","standard","none","85","92","85" +"female","group A","master's degree","free/reduced","none","50","67","73" +"male","group D","some high school","standard","completed","88","74","75" +"female","group E","associate's degree","standard","none","59","62","69" +"female","group E","some high school","free/reduced","none","32","34","38" +"male","group B","high school","free/reduced","none","36","29","27" +"female","group B","some high school","free/reduced","completed","63","78","79" +"male","group D","associate's degree","standard","completed","67","54","63" +"female","group D","some high school","standard","completed","65","78","82" +"male","group D","master's degree","standard","none","85","84","89" +"female","group C","master's degree","standard","none","73","78","74" +"female","group A","high school","free/reduced","completed","34","48","41" +"female","group D","bachelor's degree","free/reduced","completed","93","100","100" +"female","group D","some high school","free/reduced","none","67","84","84" +"male","group D","some college","standard","none","88","77","77" +"male","group B","high school","standard","none","57","48","51" +"female","group D","some college","standard","completed","79","84","91" +"female","group C","bachelor's degree","free/reduced","none","67","75","72" +"male","group E","bachelor's degree","standard","completed","70","64","70" +"male","group D","bachelor's degree","free/reduced","none","50","42","48" +"female","group A","some college","standard","none","69","84","82" +"female","group C","bachelor's degree","standard","completed","52","61","66" +"female","group C","bachelor's degree","free/reduced","completed","47","62","66" +"female","group B","associate's degree","free/reduced","none","46","61","55" +"female","group E","some college","standard","none","68","70","66" +"male","group E","bachelor's degree","standard","completed","100","100","100" +"female","group C","high school","standard","none","44","61","52" +"female","group C","associate's degree","standard","completed","57","77","80" +"male","group B","some college","standard","completed","91","96","91" +"male","group D","high school","free/reduced","none","69","70","67" +"female","group C","high school","free/reduced","none","35","53","46" +"male","group D","high school","standard","none","72","66","66" +"female","group B","associate's degree","free/reduced","none","54","65","65" +"male","group D","high school","free/reduced","none","74","70","69" +"male","group E","some high school","standard","completed","74","64","60" +"male","group E","associate's degree","free/reduced","none","64","56","52" +"female","group D","high school","free/reduced","completed","65","61","71" +"male","group E","associate's degree","free/reduced","completed","46","43","44" +"female","group C","some high school","free/reduced","none","48","56","51" +"male","group C","some college","free/reduced","completed","67","74","70" +"male","group D","some college","free/reduced","none","62","57","62" +"male","group D","associate's degree","free/reduced","completed","61","71","73" +"male","group C","bachelor's degree","free/reduced","completed","70","75","74" +"male","group C","associate's degree","standard","completed","98","87","90" +"male","group D","some college","free/reduced","none","70","63","58" +"male","group A","associate's degree","standard","none","67","57","53" +"female","group E","high school","free/reduced","none","57","58","57" +"male","group D","some college","standard","completed","85","81","85" +"male","group D","some high school","standard","completed","77","68","69" +"male","group C","master's degree","free/reduced","completed","72","66","72" +"female","group D","master's degree","standard","none","78","91","96" +"male","group C","high school","standard","none","81","66","64" +"male","group A","some high school","free/reduced","completed","61","62","61" +"female","group B","high school","standard","none","58","68","61" +"female","group C","associate's degree","standard","none","54","61","58" +"male","group B","high school","standard","none","82","82","80" +"female","group D","some college","free/reduced","none","49","58","60" +"male","group B","some high school","free/reduced","completed","49","50","52" +"female","group E","high school","free/reduced","completed","57","75","73" +"male","group E","high school","standard","none","94","73","71" +"female","group D","some college","standard","completed","75","77","83" +"female","group E","some high school","free/reduced","none","74","74","72" +"male","group C","high school","standard","completed","58","52","54" +"female","group C","some college","standard","none","62","69","69" +"male","group E","associate's degree","standard","none","72","57","62" +"male","group C","some college","standard","none","84","87","81" +"female","group D","master's degree","standard","none","92","100","100" +"female","group D","high school","standard","none","45","63","59" +"male","group C","high school","standard","none","75","81","71" +"female","group A","some college","standard","none","56","58","64" +"female","group D","some high school","free/reduced","none","48","54","53" +"female","group E","associate's degree","standard","none","100","100","100" +"female","group C","some high school","free/reduced","completed","65","76","75" +"male","group D","some college","standard","none","72","57","58" +"female","group D","some college","standard","none","62","70","72" +"male","group A","some high school","standard","completed","66","68","64" +"male","group C","some college","standard","none","63","63","60" +"female","group E","associate's degree","standard","none","68","76","67" +"female","group B","bachelor's degree","standard","none","75","84","80" +"female","group D","bachelor's degree","standard","none","89","100","100" +"male","group C","some high school","standard","completed","78","72","69" +"female","group A","high school","free/reduced","completed","53","50","60" +"female","group D","some college","free/reduced","none","49","65","61" +"female","group A","some college","standard","none","54","63","67" +"female","group C","some college","standard","completed","64","82","77" +"male","group B","some college","free/reduced","completed","60","62","60" +"male","group C","associate's degree","standard","none","62","65","58" +"male","group D","high school","standard","completed","55","41","48" +"female","group C","associate's degree","standard","none","91","95","94" +"female","group B","high school","free/reduced","none","8","24","23" +"male","group D","some high school","standard","none","81","78","78" +"male","group B","some high school","standard","completed","79","85","86" +"female","group A","some college","standard","completed","78","87","91" +"female","group C","some high school","standard","none","74","75","82" +"male","group A","high school","standard","none","57","51","54" +"female","group C","associate's degree","standard","none","40","59","51" +"male","group E","some high school","standard","completed","81","75","76" +"female","group A","some high school","free/reduced","none","44","45","45" +"female","group D","some college","free/reduced","completed","67","86","83" +"male","group E","high school","free/reduced","completed","86","81","75" +"female","group B","some high school","standard","completed","65","82","78" +"female","group D","associate's degree","free/reduced","none","55","76","76" +"female","group D","bachelor's degree","free/reduced","none","62","72","74" +"male","group A","high school","standard","none","63","63","62" +"female","group E","master's degree","standard","completed","88","99","95" +"male","group C","high school","free/reduced","none","62","55","55" +"female","group C","high school","free/reduced","completed","59","71","65" +"female","group D","some college","standard","completed","68","78","77" +"female","group D","some college","free/reduced","none","77","86","86" diff --git a/Programm/src/StudentsPerformanceInExams.elm b/Programm/src/StudentsPerformanceInExams.elm new file mode 100644 index 0000000000000000000000000000000000000000..1157ba3afb2300f779f8b9e2eb01511ba23873e6 --- /dev/null +++ b/Programm/src/StudentsPerformanceInExams.elm @@ -0,0 +1,460 @@ +module StudentsPerformanceInExams exposing (main) + +-- elm stuff +import Browser +import Html exposing (Html, text, pre, div) +import Http +import Dict +import Maybe.Extra +-- Decode and Date, Time stuff +import Html.Parser +import Parser +import Csv +import Csv.Decode +import Date +import Time exposing (Month(..)) +-- Svg stuff +import TypedSvg exposing (circle, g, rect, style, svg, text_) +import TypedSvg.Attributes exposing (class, fontFamily, fontSize, textAnchor, transform, viewBox) +import TypedSvg.Attributes.InPx exposing (cx, cy, height, r, width, x, y) +import TypedSvg.Core exposing (Svg) +import TypedSvg.Types exposing (AnchorAlignment(..), Length(..), Transform(..)) +-- visualisation +import Scale exposing (ContinuousScale) +import Scale.Color +import Statistics +-- other +import Color + +-- MAIN +main = + Browser.element + { init = init + , update = update + , subscriptions = subscriptions + , view = view + } + +-- MODEL +type alias Model = { httpState : HttpState + , fullTexts : List {description: String, data: String} + , data : List Data + , error : String + } + +type HttpState + = Failure + | Loading Int + | Success + +type Arrangement + = Line_By_Line + | Forth_Loop + +type alias Data = {description: String, data: List ( String, Maybe Float )} + +filesToLoad = + [ --"http://roycekimmons.com/system/generate_data.php?dataset=exams&n=1000" + --"https://www.kaggle.com/spscientist/students-performance-in-exams/download" + "http://localhost:8000/src/StudentsPerformance.csv" + ] + +init : () -> (Model, Cmd Msg) +init _ = + ( Model (Loading <| List.length filesToLoad) [] [] "" + , Cmd.batch <| + List.map (\file -> + Http.get + { url = file + , expect = Http.expectString <| GotText file + } + ) filesToLoad + ) + +-- UPDATE +type Msg + = GotText String (Result Http.Error String) + +update : Msg -> Model -> ( Model, Cmd Msg) +update msg model = (updateModel msg model, Cmd.none) + +updateModel : Msg -> Model -> Model +updateModel msg model = + case msg of + GotText file result -> + case result of + Ok fullText -> + case model.httpState of + Failure -> {model | httpState = Failure} + Loading filesLeft -> + if filesLeft-1 == 0 then + let newFullTexts = {description = file, data = fullText}::model.fullTexts + checkedFullTexts = List.map checkInputFormat newFullTexts + in + { model | httpState = Success + , fullTexts = checkedFullTexts + , data = prepareData <| + List.map + (\data -> Data data.description <| csvString_to_data data.data) + checkedFullTexts + } + else{ model | httpState = Loading (filesLeft-1) + , fullTexts = {description = file, data = fullText}::model.fullTexts + } + Success -> {model | httpState = Failure} + Err e -> { model | httpState = Failure + , error = httpErrorToString e + } + +-- SUBSCRIPTIONS +subscriptions : Model -> Sub Msg +subscriptions model = Sub.none + +-- VIEW +view : Model -> Html Msg +view model = + case model.httpState of + Failure -> + text model.error + + Loading index-> + text ("Loading... "++(String.fromInt index)++" left") + + Success -> + text <| Maybe.withDefault "Nothing here" <| List.head <| List.map .data model.fullTexts + + {- + let rawlevel : Int -> List (Int,Int) + rawlevel years = [(years,1),(1,12),(4,1),(1,5),(1,1)] + + fstData = (list_get model.data 0).data + numberDays = List.length fstData + numberYears = let years = List.map (\date -> case date of + Ok aDate -> Date.weekYear aDate + Err _ -> 2000 + ) <| List.map Date.fromIsoString <| List.map Tuple.first fstData + in (Maybe.withDefault 0 <| List.maximum years) - (Maybe.withDefault 0 <| List.minimum years) + rawlevel_uncorrected = rawlevel numberYears + numberSlots_uncorrected = List.foldl (*) 1 <| List.map (\(x,y)-> x*y) <| rawlevel_uncorrected + diffDays = toFloat <| numberDays-numberSlots_uncorrected + daysPerYear = toFloat <| List.foldl (*) 1 <| List.map (\(x,y)-> x*y) <| List.drop 1 <| rawlevel numberYears + correctedYears = if numberSlots_uncorrected > numberDays then numberYears + else numberYears + (ceiling <| diffDays / daysPerYear) + + rawlevel_corrected = rawlevel correctedYears + + numberSlots = List.foldl (*) 1 <| List.map (\(x,y)-> x*y) rawlevel_corrected + + level = augmentLevel rawlevel_corrected + drawList_Line_by_Line = drawArrangement Line_By_Line level + drawList_Forth_Loop = drawArrangement Forth_Loop level + w = 50 + h = 20 + in + div [] + [ Html.div [] [Html.text <| "Anzahl Tage pro Zeitreihe:"++(String.fromInt numberDays)] + , Html.div [] [Html.text <| "Anzahl Slots pro Zeitreihe: "++(String.fromInt numberSlots)] + , Html.table [] + <| List.append + [ Html.tr [] + [ Html.td [] [] + , Html.td [] [Html.text "Line by Line Arrangement"] + , Html.td [] [Html.text "Forth-Loop Arrangement"] + ] + ] + <| List.map (\zeitreihe -> + Html.tr [] + [ Html.td [] [Html.text zeitreihe.description] + , Html.td [] [viewData (w,h) drawList_Line_by_Line zeitreihe] + , Html.td [] [viewData (w,h) drawList_Forth_Loop zeitreihe] + ] + ) model.data + ]-} + +-- viewHelper +viewArrangement : Arrangement -> List ( Int, Int ) -> Html Msg +viewArrangement arrangement drawList = + Html.div [] + [ Html.text <| " Arrangement:" + , Html.table [] + <| List.map (\line -> + Html.tr [] <| List.map (\n -> Html.td [] [Html.text <| String.fromInt n]) line + ) (coordsListToListOfLines drawList) + ] + +viewDataWithDescription : (Int,Int) -> List ( Int, Int ) -> Data -> Html Msg +viewDataWithDescription (w,h) drawList zeitreihe = + Html.div [] + [ Html.h4 [] [Html.text zeitreihe.description] + , viewData (w,h) drawList zeitreihe + ] + +viewData : (Int,Int) -> List ( Int, Int ) -> Data -> Html Msg +viewData (w,h) drawList zeitreihe = + Html.div [] [svg [ viewBox 0 0 (toFloat w) (toFloat h) + , TypedSvg.Attributes.width <| TypedSvg.Types.Percent 100 + , TypedSvg.Attributes.height <| TypedSvg.Types.Percent 100 + ][ drawDimension (w,h) drawList zeitreihe.data ]] + +-- Decode csv-String +checkInputFormat : {description: String, data: String} -> {description: String, data: String} +checkInputFormat input = + if String.left 15 input.data == "<!DOCTYPE HTML>" then + let -- Error handling for parsing + deadEndsToString : List Parser.DeadEnd -> String -- sadly Parser.deadEndsToString always just prints "TODO: deadEndsToString" + deadEndsToString deadEnds = "[ "++(List.foldl (++) " ]" <| List.map deadEndToString deadEnds) + + deadEndToString : Parser.DeadEnd -> String + deadEndToString {row,col,problem} = "row = "++(String.fromInt row)++", col = "++(String.fromInt col)++", problem = "++(problemToString problem) + + problemToString : Parser.Problem -> String + problemToString problem = + case problem of + Parser.Expecting string -> "Expecting \""++string++"\"" + Parser.ExpectingInt -> "ExpectingInt" + Parser.ExpectingHex -> "ExpectingHex" + Parser.ExpectingOctal -> "ExpectingOctal" + Parser.ExpectingBinary -> "ExpectingBinary" + Parser.ExpectingFloat -> "ExpectingFloat" + Parser.ExpectingNumber -> "ExpectingNumber" + Parser.ExpectingVariable -> "ExpectingVariable" + Parser.ExpectingSymbol string -> "ExpectingSymbol \""++string++"\"" + Parser.ExpectingKeyword string -> "ExpectingKeyword \""++string++"\"" + Parser.ExpectingEnd -> "ExpectingEnd" + Parser.UnexpectedChar -> "UnexpectedChar" + Parser.Problem string -> "Problem \""++string++"\"" + Parser.BadRepeat -> "BadRepeat" + -- get the csv string from html document + data = String.dropLeft 15 input.data -- the parser can't parse the <!DOCTYPE HTML>-part of Html + htmlDataResult = Html.Parser.run data + dataInCorrectFormat = + case htmlDataResult of + Ok htmlData -> + let allTexts = findallTexts htmlData + + findallTexts : List Html.Parser.Node -> List String + findallTexts nodes = List.concat <| List.map2 findallTextsHelper nodes <| List.repeat (List.length nodes) [] + findallTextsHelper : Html.Parser.Node -> List String -> List String + findallTextsHelper outerNode texts = + case outerNode of + Html.Parser.Text string -> string::texts + Html.Parser.Element string attrs childNodes -> + List.concat + [ List.concat <| List.map2 findallTextsHelper childNodes <| List.repeat (List.length childNodes) [] + , texts + ] + Html.Parser.Comment string -> [] + in -- The longest String should be the csv one + Maybe.withDefault "There is no text in this html-file." <| list_Last <| List.sortBy String.length allTexts + Err errorList -> "Input was Html-file, but Error while Parsing it: "++(deadEndsToString errorList)++"\t\r\n" + ++"Html-file:\t\r\n"++data + + in {input | data = dataInCorrectFormat } + else input + +csvString_to_data : String -> List ( String, Maybe Float ) +csvString_to_data csvRaw = + Csv.parse csvRaw + |> Csv.Decode.decodeCsv decodeStockDay + |> Result.toMaybe + |> Maybe.withDefault [] + +decodeStockDay : Csv.Decode.Decoder (( String, Maybe Float ) -> a) a +decodeStockDay = + Csv.Decode.map (\a b -> ( a, Just b )) + (Csv.Decode.field "Date" Ok + |> Csv.Decode.andMap + (Csv.Decode.field "Open" + (String.toFloat >> Result.fromMaybe "error parsing string") + ) + ) + +prepareData : List Data -> List Data +prepareData rawData = + let startDate = Date.fromCalendarDate 1980 Dec 23 + untilDate = Date.fromCalendarDate 2011 Jun 9 + allDates = Dict.fromList <| + List.map + (\date -> (Date.toIsoString date, Nothing)) + <| Date.range Date.Day 1 startDate untilDate + + rawDictData : List ( Dict.Dict String (Maybe Float) ) + rawDictData = List.map Dict.fromList <| List.map .data rawData + + resultDictData : List ( Dict.Dict String (Maybe Float) ) + resultDictData = List.map (\rawDict -> Dict.union rawDict allDates) rawDictData + + resultDataList = List.map Dict.toList resultDictData + + resultWithoutWeekends = List.map (\data -> List.filter (\(dateString,mayFloat) -> + case Date.fromIsoString dateString of + Ok date -> if List.member (Date.weekdayNumber date) [6,7] + then False else True + Err _ -> True + ) data) resultDataList + + in List.map2 (\raw result -> {raw | data = result}) rawData resultWithoutWeekends + +dataToString : List ( String, Maybe Float ) -> String +dataToString dataList = + List.foldr (++) "" + <| List.map + (\elem -> (Tuple.first elem)++" "++ + (let rightString = String.fromFloat <| Maybe.withDefault -1234879231 <| Tuple.second elem + in if rightString == "-1234879231" then "No Data" else rightString + )++"\n" + ) + dataList + +-- Für Zeichnen + +augmentLevel : List ( Int, Int ) -> List ( ( Int, Int ), ( Int, Int ) ) +augmentLevel level = + let next : List ( Int, Int ) + next = List.foldr + (\( w, h ) nl -> + let ( nlx, nly ) = + case nl of + [] -> ( 1, 1 ) + ( x, y ) :: _ -> ( x, y ) + in ( w * nlx, h * nly ) :: nl + ) + [] + level + in List.map2 Tuple.pair level (List.append (List.drop 1 next) [ ( 0, 0 ) ]) + +coordsListToListOfLines : List (Int, Int) -> List (List Int) +coordsListToListOfLines coords = -- requires the coords to fill the whole place minX - maxX, minY - maxY otherwise there will be -1 elements + let minX = Maybe.withDefault 0 <| List.minimum <| List.map Tuple.first coords + maxX = Maybe.withDefault (List.length coords) <| List.maximum <| List.map Tuple.first coords + minY = Maybe.withDefault 0 <| List.minimum <| List.map Tuple.second coords + maxY = Maybe.withDefault (List.length coords) <| List.maximum <| List.map Tuple.second coords + initialLines = List.repeat (maxY-minY+1) (List.repeat (maxX-minX+1) -1) + coordsListToListOfLinesHelper : List (Int,(Int, Int)) -> List (List Int) -> List (List Int) + coordsListToListOfLinesHelper indexedCoords lines = + case indexedCoords of + [] -> lines + (i,(x,y))::cs -> coordsListToListOfLinesHelper cs <| list_set lines (y-minY) (list_set (list_get lines (y-minY)) (x-minX) i) + in coordsListToListOfLinesHelper (List.indexedMap Tuple.pair coords) initialLines + +type alias LoopRec = + { xOuterLoop : Int, yLoop : Int, outerResult : List ( Int, Int ) } + +drawArrangement : Arrangement -> List ( ( Int, Int ), ( Int, Int ) ) -> List ( Int, Int ) +drawArrangement arrangement lvl = + let drawLineByLine : Int -> Int -> List ( ( Int, Int ), ( Int, Int ) ) -> List ( Int, Int ) + drawLineByLine x y level = + case level of + [] -> [ ( x, y ) ] + ( ( width, height ), ( next_x, next_y ) ) :: reducedLevel -> + let temp = List.foldl + (\_ { xOuterLoop, yLoop, outerResult } -> + let innerResult = List.foldl + (\_ ( xLoop, result ) -> + ( xLoop + next_x + , List.append + result + (drawLineByLine xLoop yLoop reducedLevel) + ) + )( xOuterLoop, [] ) <| List.range 1 width + in LoopRec xOuterLoop + (yLoop + next_y) + (List.append outerResult (Tuple.second innerResult)) + )(LoopRec x y []) <| List.range 1 height + in temp.outerResult + drawForthLoop : Int -> Int -> List ( ( Int, Int ), ( Int, Int ) ) -> List ( Int, Int ) + drawForthLoop x y level = + case level of + [] -> [ ( x, y ) ] + ( ( width, height ), ( next_x, next_y ) ) :: reducedLevel -> + let temp = List.foldl + (\h { xOuterLoop, yLoop, outerResult } -> + let isOdd = modBy 2 h == 0 + xOperation = if isOdd then (-) else (+) + xLoopOperation = if isOdd then (+) ((width-1)*next_x) else (+) 0 + innerResult = List.foldl + (\_ ( xLoop, result ) -> + ( xOperation xLoop next_x + , List.append + result + (drawForthLoop (xLoopOperation xLoop) yLoop reducedLevel) + ) + )( xOuterLoop, [] ) <| List.range 1 width + in LoopRec xOuterLoop + (yLoop + next_y) + (List.append outerResult (Tuple.second innerResult)) + )(LoopRec x y []) <| List.range 1 height + in temp.outerResult + in case arrangement of + Line_By_Line -> drawLineByLine 0 0 lvl + Forth_Loop -> drawForthLoop 0 0 lvl + +drawDimension : ( Int, Int ) -> List ( Int, Int ) -> List ( String, Maybe Float ) -> Svg Msg +drawDimension (w,h) pixelMapping data = + let scaleTo01 = data + |> List.map Tuple.second + |> Maybe.Extra.values + |> Statistics.extent + |> Maybe.withDefault ( 0, 1 ) + |> Scale.linear ( 0, 1 ) + -- without this multiplier the last col and last row don't fits in viewbox w h + (minX,maxX) = Maybe.withDefault (0,0) <| Statistics.extent <| List.map toFloat <| List.map Tuple.first pixelMapping + (minY,maxY) = Maybe.withDefault (0,0) <| Statistics.extent <| List.map toFloat <| List.map Tuple.second pixelMapping + w_multiplier = (maxX-minX-1)/(maxX-minX) + h_multiplier = (maxY-minY-1)/(maxY-minY) + + ( scaleW, scaleH ) = + pixelMapping + |> List.map (Tuple.mapBoth toFloat toFloat) + |> (\l -> ( List.map Tuple.first l, List.map Tuple.second l )) + |> Tuple.mapBoth + (Statistics.extent >> Maybe.withDefault ( 0.0, 100.0 ) >> Scale.linear ( 0, (*) w_multiplier <| toFloat w )) + (Statistics.extent >> Maybe.withDefault ( 0.0, 100.0 ) >> Scale.linear ( 0, (*) h_multiplier <| toFloat h )) + + drawPixel : ( Int, Int ) -> ( String, Maybe Float ) -> Svg Msg + drawPixel ( pixelX, pixelY ) ( label, value ) = + rect[ TypedSvg.Attributes.x <| TypedSvg.Types.Px <| Scale.convert scaleW <| toFloat pixelX + , TypedSvg.Attributes.y <| TypedSvg.Types.Px <| Scale.convert scaleH <| toFloat pixelY + , TypedSvg.Attributes.width <| TypedSvg.Types.Px <| Scale.convert scaleW 1 + , TypedSvg.Attributes.height <| TypedSvg.Types.Px <| Scale.convert scaleH 1 + , TypedSvg.Attributes.fill <| TypedSvg.Types.Paint + <| Maybe.withDefault Color.darkGray + <| Maybe.map (Scale.Color.infernoInterpolator << Scale.convert scaleTo01) value + ][] + in g [] <| List.map2 drawPixel pixelMapping data + +-- Working with Lists + +list_Last : List a -> Maybe a +list_Last list = + case list of + [] -> Nothing + x::[] -> Just x + x::xs -> list_Last xs + +list_next : List a -> List a +list_next list = List.append (List.drop 1 list) (List.take 1 list) + +list_get : List a -> Int -> a -- returns the listelement at index i. creates endless loop if length list < i+1 +list_get list i = + case list of + [] -> list_get list i + x::xs -> if i == 0 then x else list_get xs (i-1) + +list_set : List a -> Int -> a -> List a -- resets at index i the element with e. does nothing if length list < i+1 +list_set list i e = + case list of + [] -> [] + x::xs -> if i==0 then e::xs else x::(list_set xs (i-1) e) + +-- Working with Errors +httpErrorToString : Http.Error -> String +httpErrorToString err = + "Http-Error: "++( + case err of + Http.BadUrl string -> "BadUrl "++string + Http.Timeout -> "Timeout" + Http.NetworkError -> "NetworkError" + Http.BadStatus int -> "BadStatus "++(String.fromInt int) + Http.BadBody string -> "BadBody "++string + ) \ No newline at end of file