Esempio n. 1
0
        /// <summary>
        /// Gets the chart values from per grade outcome YAML.
        /// </summary>
        /// <param name="tableYAML">The table yaml.</param>
        /// <param name="stateId">The state identifier.</param>
        /// <returns>System.String.</returns>
        public string GetStackedChartValues(string tableYAML, int stateId)
        {
            string           html   = "";
            List <ChartData> grades = new List <ChartData>();
            List <ChartData> result = new List <ChartData>();

            try
            {
                string tmp    = "";
                string values = "";

                if (!tmp.StartsWith("---\n"))
                {
                    tmp = "---\n" + tmp;
                }

                tmp = tableYAML.Replace("\\n", "\r\n");
                tmp = tmp.Replace("\t", "");
                // Setup the input
                var input = new StringReader(tmp);

                // Load the stream
                var yaml = new YamlStream();
                yaml.Load(input);

                // Examine the stream
                var mapping =
                    (YamlMappingNode)yaml.Documents[0].RootNode;

                int outer = 0;
                foreach (var entry in mapping.Children)
                {
                    if (entry.Value.ToString().Contains(","))
                    {
                        int i = 0;
                        foreach (var ent in ((YamlSequenceNode)entry.Value))
                        {
                            if (entry.Key.ToString() == "Grade")
                            {
                                string    value = String.Equals(ent.ToString(), "---") ? "Overall": Ordinal(Convert.ToInt32(ent.ToString())) + " grade";
                                ChartData cd    = new ChartData
                                {
                                    Label = value
                                };
                                grades.Add(cd);
                            }
                            else if (entry.Key.ToString().Contains(": treated"))
                            {
                                ChartData cd = (ChartData)grades[i].Clone();
                                cd.Type  = entry.Key.ToString().Replace(": treated", "");
                                cd.Value = String.Format("{0:0.0}", Convert.ToDecimal(ent.ToString()) * 100);
                                cd.SD    = "Treated";
                                cd.Rank  = outer;
                                result.Add(cd);
                            }
                            else if (entry.Key.ToString().Contains(": control"))
                            {
                                ChartData cd = (ChartData)grades[i].Clone();
                                cd.Type  = entry.Key.ToString().Replace(": control", "");
                                cd.Value = String.Format("{0:0.0}", Convert.ToDecimal(ent.ToString()) * 100);
                                cd.SD    = "Control";
                                cd.Rank  = outer;
                                result.Add(cd);
                            }
                            i++;
                        }
                    }
                    else
                    {
                        if (entry.Key.ToString() == "Grade")
                        {
                            string value = String.Equals(entry.Value.ToString(), "---")
                                ? "Overall"
                                : Ordinal(Convert.ToInt32(entry.Value.ToString())) + " grade";
                            ChartData cd = new ChartData
                            {
                                Label = value
                            };
                            grades.Add(cd);
                        }
                        if (entry.Key.ToString().Contains(": treated"))
                        {
                            ChartData cd = (ChartData)grades[0].Clone();
                            cd.Type  = entry.Key.ToString().Replace(": treated", "");
                            cd.Value = String.Format("{0:0.0}", Convert.ToDecimal(entry.Value.ToString()) * 100);
                            cd.SD    = "Treated";
                            cd.Rank  = outer;
                            result.Add(cd);
                        }
                        if (entry.Key.ToString().Contains(": control"))
                        {
                            ChartData cd = (ChartData)grades[0].Clone();
                            cd.Type  = entry.Key.ToString().Replace(": control", "");
                            cd.Value = String.Format("{0:0.0}", Convert.ToDecimal(entry.Value.ToString()) * 100);
                            cd.SD    = "Control";
                            cd.Rank  = outer;
                            result.Add(cd);
                        }
                    }
                    if (entry.Key.ToString().Contains(": control"))
                    {
                        outer++;
                    }
                }

                string json = JsonConvert.SerializeObject(result);
                return(json);
            }
            catch (Exception ex)
            {
                string temp = ex.Message;
                // result.Append("<p>There was an error parsing the YAML for this subgroup analysis.</p>");
                return(temp);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Takes in values for charting and outputs as JSON.
        /// </summary>
        /// <param name="varname">The name of the variable to format, for special cases.</param>
        /// <param name="control">CSV list of values for control group</param>
        /// <param name="intervention">CSV list of values for intervention (treatment) group</param>
        /// <param name="grade">CSV list of grades</param>
        /// <param name="isPercent">Boolean if the number is a percentage or value</param>
        /// <param name="sdControl">CSV list of values for standard deviation for control group</param>
        /// <param name="sdIntervention">CSV list of values for standard deviation for interventiong (treatment) group</param>
        /// <returns></returns>
        public string GetChartDataJSON(string varname, string control, string intervention, string grade, bool isPercent, string sdControl = "", string sdIntervention = "")
        {
            string[] controls        = control.Split(',');
            string[] interventions   = intervention.Split(',');
            string[] grades          = grade.Split(',');
            string[] sdControls      = sdControl.Split(',');
            string[] sdInterventions = sdIntervention.Split(',');
            string   json            = "";

            List <ChartData> chartData = new List <ChartData>();

            ChartData cd = new ChartData();
            Double    cval;
            Double    ival;
            Double    sdval;
            int       gradeValue;

            if (isPercent)
            {
                for (int i = 0; i < controls.Length; i++)
                {
                    if (Double.TryParse(controls[i], out ival))
                    {
                        cd = new ChartData
                        {
                            Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i],
                            Value = formatPercent(controls[i], 0),
                            Type  = "Control",
                            SD    = Double.TryParse(sdControls[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-"
                        };

                        chartData.Add(cd);
                    }
                }
                for (int i = 0; i < interventions.Length; i++)
                {
                    if (Double.TryParse(interventions[i], out ival))
                    {
                        cd = new ChartData
                        {
                            Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i],
                            Value = formatPercent(interventions[i], 0),
                            Type  = "Treatment",
                            SD    = Double.TryParse(sdInterventions[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-"
                        };

                        chartData.Add(cd);
                    }
                }
            }
            else
            {
                if (varname == "promotion")
                {
                    for (int i = 0; i < controls.Length; i++)
                    {
                        if (Double.TryParse(controls[i], out cval))
                        {
                            cd = new ChartData
                            {
                                Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i],
                                Value = String.Format("{0:0.00}", cval),
                                Type  = "Control",
                                SD    = Double.TryParse(sdControls[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-"
                            };

                            chartData.Add(cd);
                        }
                    }
                    for (int i = 0; i < interventions.Length; i++)
                    {
                        if (Double.TryParse(interventions[i], out ival))
                        {
                            cd = new ChartData
                            {
                                Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i],
                                Value = String.Format("{0:0.00}", ival),
                                Type  = "Treatment",
                                SD    = Double.TryParse(sdInterventions[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-"
                            };

                            chartData.Add(cd);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < controls.Length; i++)
                    {
                        if (Double.TryParse(controls[i], out cval))
                        {
                            cd = new ChartData
                            {
                                Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i],
                                Value = String.Format("{0:0}", Math.Ceiling(cval)),
                                Type  = "Control",
                                SD    = Double.TryParse(sdControls[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-"
                            };

                            chartData.Add(cd);
                        }
                    }
                    for (int i = 0; i < interventions.Length; i++)
                    {
                        if (Double.TryParse(interventions[i], out ival))
                        {
                            cd = new ChartData
                            {
                                Label = Int32.TryParse(grades[i], out gradeValue) ? Ordinal(Convert.ToInt32(gradeValue)) : grades[i],
                                Value = String.Format("{0:0}", Math.Ceiling(ival)),
                                Type  = "Treatment",
                                SD    = Double.TryParse(sdInterventions[i], out sdval) ? formatPercent(sdval.ToString(), 1) : "-"
                            };

                            chartData.Add(cd);
                        }
                    }
                }
            }

            json = JsonConvert.SerializeObject(chartData);
            return(json);
        }