//EFE:Crea un gráfico con la información de los resultados en la base de datos. //REQ:Que exista una conexion a la base de datos. //MOD:--string cedulaProfesor, short annoGrupo, byte semestreGrupo, byte numeroGrupo, string siglaCurso, public JsonResult GraficoPie(string codigoFormulario, string cedulaProfesor, short annoGrupo, byte semestreGrupo, byte numeroGrupo, string siglaCurso, string itemId, byte tipoPregunta) { var result = ObtenerCantidadRespuestasPorPregunta(codigoFormulario, cedulaProfesor, annoGrupo, semestreGrupo, numeroGrupo, siglaCurso, itemId).ToList(); List <object> x = new List <object>(); List <object> y = new List <object>(); List <int?> listaOrdenada = new List <int?>(); int size = 0; double? mediana = 0; double? tamanio = 0; int counter = 0; double? promedio = 0; double? desviacion = 0; double sumatoria = 0; double actual = 0; if (!Enumerable.Range(5, 6).Contains(tipoPregunta)) { var labels = db.SP_RecuperarEtiquetas(tipoPregunta, itemId).ToList(); bool encontrado; foreach (var label in labels) { encontrado = false; x.Add(label); foreach (var resul in result) { if (resul.Respuesta == label) { y.Add(resul.cntResp); listaOrdenada.Add(resul.cntResp); tamanio = tamanio + listaOrdenada[counter]; counter++; encontrado = true; } } if (encontrado == false) { y.Add(0); listaOrdenada.Add(0); tamanio = tamanio + listaOrdenada[counter]; counter++; } } } else { var rango = db.SP_RecuperarEtiquetasEscalar(tipoPregunta, itemId).ToList(); int inicio = rango[0].Inicio; int final = rango[0].Fin; int incremento = rango[0].Incremento; bool encontrado = false; for (int i = inicio; i <= (final + 1); i += incremento) { encontrado = false; if (i == final + 1) { x.Add("No se/No Responde/No Aplica"); foreach (var resul in result) { if (Int16.Parse(resul.Respuesta) == i) { encontrado = true; y.Add(resul.cntResp); listaOrdenada.Add(resul.cntResp); tamanio = tamanio + listaOrdenada[counter]; counter++; } } if (encontrado == false) { y.Add(0); listaOrdenada.Add(0); tamanio = tamanio + listaOrdenada[counter]; counter++; } } else { x.Add(i); foreach (var resul in result) { if (Int16.Parse(resul.Respuesta) == i) { encontrado = true; y.Add(resul.cntResp); listaOrdenada.Add(resul.cntResp); tamanio = tamanio + listaOrdenada[counter]; counter++; } } if (encontrado == false) { y.Add(0); listaOrdenada.Add(0); tamanio = tamanio + listaOrdenada[counter]; counter++; } } } } listaOrdenada.Sort(); size = listaOrdenada.Count(); //Calcular el promedio promedio = tamanio / size; //Calcular la mediana if (size % 2 == 0) { mediana = (listaOrdenada[(size / 2) - 1] + listaOrdenada[(size / 2)]) / 2; } else { mediana = listaOrdenada[(size / 2)]; } //Calcular la desviacion estandar for (int i = 0; i < size; i++) { actual = (double)listaOrdenada[i]; sumatoria = sumatoria + Math.Pow(actual - (double)mediana, 2); } desviacion = Math.Sqrt(sumatoria / size); List <object> lista = new List <object> { x, y, promedio, mediana, desviacion }; return(Json(lista, JsonRequestBehavior.AllowGet)); }