public Graphs() { InitializeComponent(); var properties = typeof(PatientSample).GetProperties(); var propertyCountDictionary = properties.ToDictionary(p => p.Name, p => 0); var patients = PatientSampleParser.ParseDirectory(@"C:\Projects\SepsisChallenge\Samples\training"); var septicPatients = patients.Where(p => p.IsSeptic); var nonSepticPatietns = patients.Where(p => !p.IsSeptic); int maxTime = septicPatients.Max(p => p.SepticHour); var points = new List <PatientSample>(); var pointsDictionaryNonSeptic = new Dictionary <int, List <PatientSample> >(); var pointsDictionarySeptic = new Dictionary <int, List <PatientSample> >(); foreach (var patient in septicPatients) { foreach (var prop in properties) { if (prop.PropertyType.Name != "Nullable`1") { continue; } if (patient.PatientSamples.Exists(p => ((double?)prop.GetValue(p, null)).HasValue)) { propertyCountDictionary[prop.Name] += 1; } } foreach (var ps in patient.PatientSampleDeltas) { int key = ps.TimeBeforeSepsis; if (pointsDictionarySeptic.ContainsKey(key)) { pointsDictionarySeptic[key].Add(ps); } else { pointsDictionarySeptic.Add(key, new List <PatientSample>() { ps }); } } } foreach (var patient in nonSepticPatietns) { foreach (var ps in patient.PatientSampleDeltas) { int key = ps.TimeBeforeSepsis; if (pointsDictionaryNonSeptic.ContainsKey(key)) { pointsDictionaryNonSeptic[key].Add(ps); } else { pointsDictionaryNonSeptic.Add(key, new List <PatientSample>() { ps }); } } } // TODO: filters can be applied here var averages = pointsDictionarySeptic.Select(p => mapToPoint(p)).ToDictionary(p => p.TimeBeforeSepsis, p => p); var averageNonSeptic = pointsDictionaryNonSeptic.Select(p => mapToPoint(p)).ToDictionary(p => p.TimeBeforeSepsis, p => p); int maxDay = Math.Max(averageNonSeptic.Max(p => p.Key), averages.Max(p => p.Key)); int minDay = Math.Min(averageNonSeptic.Min(p => p.Key), averages.Min(p => p.Key)); // combine dictionaries var graphPoints = new List <GraphPoint>(); for (int i = minDay; i <= maxDay; i++) { var graphPoint = new GraphPoint { Hour = i, HR_NS = averageNonSeptic.ContainsKey(i) ? averageNonSeptic[i].HR ?? 0.0 : 0.0, DBP_NS = averageNonSeptic.ContainsKey(i) ? averageNonSeptic[i].DBP ?? 0.0 : 0.0, SBP_NS = averageNonSeptic.ContainsKey(i) ? averageNonSeptic[i].SBP ?? 0.0 : 0.0, HR = averages.ContainsKey(i) ? averages[i].HR ?? 0.0 : 0.0, DBP = averages.ContainsKey(i) ? averages[i].DBP ?? 0.0 : 0.0, SBP = averages.ContainsKey(i) ? averages[i].SBP ?? 0.0 : 0.0 }; graphPoints.Add(graphPoint); } this.indicatorChart.ChartAreas[0].AxisX.Minimum = -92; this.indicatorChart.ChartAreas[0].AxisX.Maximum = 10; this.indicatorChart.ChartAreas[0].AxisY.Minimum = 50; this.indicatorChart.ChartAreas[0].AxisY.Maximum = 150; this.indicatorChart.DataSource = graphPoints; this.indicatorChart.DataBind(); foreach (var item in propertyCountDictionary.Where(kvp => kvp.Value != 0).OrderByDescending(kvp => kvp.Value)) { this.samplesListView.Items.Add(string.Format(@"{0}: {1}", item.Key, item.Value)); } }
public TrainingSet(string dir = @"C:\Projects\SepsisChallenge\Samples\training") : this(PatientSampleParser.ParseDirectory(dir, 1000)) { }