Exemple #1
0
        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));
            }
        }
Exemple #2
0
 public TrainingSet(string dir = @"C:\Projects\SepsisChallenge\Samples\training")
     : this(PatientSampleParser.ParseDirectory(dir, 1000))
 {
 }