Exemplo n.º 1
0
        public void TestTable()
        {
            var args = new SqlConnectionStringBuilder("Server=192.168.100.12;Initial Catalog=InSysProMaxLive20181126;User ID=sa;Password=dev123sql$%^;");

            using (var dfg = new ZTable(args, "tSellerHRIS", false))
            {
                dfg.Load(100);
            }
        }
Exemplo n.º 2
0
        public IActionResult GetSubjectData(string subject, string faculty)
        {
            var sheets = ExamSheetManager.Get(faculty, subject, true);
            var model  = new SubjectChartJsonModel();

            if (!sheets?.Any() ?? true)
            {
                return(Json(model));
            }
            var ids            = sheets.Select(x => x.Id);
            var groupedByYears = sheets.GroupBy(x => x.Year).OrderBy(x => x.Key);

            model.AverageRatings  = new Dictionary <string, float>();
            model.RatingFrequency = new Dictionary <short, short>();
            var ratings = new List <RatingModel>();

            foreach (var year in groupedByYears)
            {
                var groupedBySemesters = year.GroupBy(x => x.Semester).OrderByDescending(x => x.Key);
                foreach (var semester in groupedBySemesters)
                {
                    var sum   = 0;
                    var count = 0;
                    foreach (var item in semester)
                    {
                        ratings.AddRange(item.Ratings);
                        sum   += item.Ratings.Sum(x => x.Mark);
                        count += item.Ratings.Count;
                    }
                    var average = sum / (float)count;
                    var title   = string.Format("{0} {1}", year.Key, semester.Key);
                    model.AverageRatings.Add(title, average);
                }
            }
            foreach (var rating in ratings)
            {
                if (model.RatingFrequency.ContainsKey(rating.Mark))
                {
                    model.RatingFrequency[rating.Mark]++;
                }
                else
                {
                    model.RatingFrequency.Add(rating.Mark, 1);
                }
            }
            var M     = ratings.Sum(x => x.Mark) / ratings.Count;
            var D     = ratings.Sum(x => Math.Pow(x.Mark - M, 2)) / (ratings.Count - 1);
            var sigma = Math.Sqrt(D);
            var size  = 4;

            model.NormalDistributions = new Dictionary <short, double> [size];
            for (int i = 0; i < size; ++i)
            {
                model.NormalDistributions[i] = new Dictionary <short, double>();
            }
            var eScore       = calcZScore(60, M, sigma);
            var cScore       = calcZScore(74, M, sigma);
            var aScore       = calcZScore(90, M, sigma);
            var eProbability = ZTable.GetProbability(eScore);
            var cProbability = ZTable.GetProbability(cScore);
            var aProbability = ZTable.GetProbability(aScore);

            var probFail           = eProbability * 100;
            var probSatisfactorily = (cProbability - eProbability) * 100;
            var probGood           = (aProbability - cProbability) * 100;
            var probExcellent      = (1 - aProbability) * 100;

            model.NormalDistributionLabels = new List <string>()
            {
                string.Format("Ймовірність не здати предмет: {0}%", probFail.ToString("0.0")),
                string.Format("Ймовірність здати на 60-74: {0}%", probSatisfactorily.ToString("0.0")),
                string.Format("Ймовірність здати на 74-90: {0}%", probGood.ToString("0.0")),
                string.Format("Ймовірність здати на 90+: {0}%", probExcellent.ToString("0.0"))
            };
            for (short i = 0; i < 100; ++i)
            {
                double func = (1 / (sigma * Math.Sqrt(2 * Math.PI))) * Math.Exp(-(Math.Pow((i - M), 2)) / (2 * sigma * sigma));
                if (i < 60)
                {
                    model.NormalDistributions[0].Add(i, func * 1000);
                }
                else if (i < 74)
                {
                    model.NormalDistributions[1].Add(i, func * 1000);
                }
                else if (i < 90)
                {
                    model.NormalDistributions[2].Add(i, func * 1000);
                }
                else
                {
                    model.NormalDistributions[3].Add(i, func * 1000);
                }
            }
            return(Json(model));
        }