Entrada destacada

Como usar enums en Android, kotlin

Programando: Media, Varianza y Desviación Estándar en Java, C++ y python



Descripción 
Veamos como obtener la Media, Varianza y Desviación Estándar en JAVA, C++ y python.
Antes de programar estas operaciones veamos que es la media, la varianza y la desviación estándar.

¿Qué es la media aritmética?

También denominada simplemente como media o promedio y es la más conocida y la más fácil de calcular. Se define como el cociente de dividir la suma de un conjunto de valores (muestra) por el número total de elementos "n". 


28
media = sumatoria / 10; //media aritmetica, n=10 

donde:
Sumatoria = Es la suma de todos los valores que toma la variable en la población o en la  muestra.

n = Es número total de observaciones o datos.








¿Qué es la varianza?

Es una medida cuya importancia radica especialmente en que da origen a otra medida de dispersión más significativa, denominada desviación estándar o desviación típica. Es la media de los cuadrados de las desviaciones.

31
32
33
34
35
36
  for(int i = 0 ; i<10; i++){
   double rango;
   rango = Math.pow(valor[i] - media,2f);
   varianza = varianza + rango;
  }
  varianza = varianza / 10f;//suma de diferencias sobre "n" o "n - 1"


¿Qué es la Desviación estándar?


Nos indica cuánto pueden alejarse los valores respecto al promedio (media), por lo tanto es  útil para buscar probabilidades de que un evento ocurra.
39
desviacion = Math.sqrt(varianza);


Sabiendo todo lo anterior la programación de dichas formulas es relativamente sencillo:

Solución para JAVA.
DesviacionEstandar.java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.Scanner;
public class DesviacionEstandar {

 public static void main(String[] args) {
  //definición  de variables 
  int valor [] = new int[10];
  int sumatoria = 0;
  float media = 0;
  double varianza = 0.0;
  double desviacion= 0.0; 
   
  Scanner entrada = new Scanner(System.in);
                //se abre el flujo entrada
  
  System.out .println("Ingrese el valor de 10 numeros"
                                     +" como muestra");
  //petición de datos y sumatoria de todos
  for (int i = 0; i < 10; i++ ){
   
   System.out.print("Ingrese el valor " + (i + 1) + ":");
   valor[i] = entrada.nextInt();
   
   sumatoria = sumatoria + valor[i];
    
  }
  entrada.close();//se cierra el flujo entrada
  
  media = sumatoria / 10; //media aritmetica 
  
  //se hace la suma de las diferencias respecto a la media
  for(int i = 0 ; i < 10; i++){
   double rango;
   rango = Math.pow(valor[i] - media, 2f);
   varianza = varianza + rango;
  }
  varianza = varianza / 10f;//suma de diferencias sobre "n"
  //teniendo ya la varinza sólo debemos sacarle raiz cuadrada 
  //tendremos la desviación estandar
  desviacion = Math.sqrt(varianza);
  
  //impresion de resultados
  System.out.println("Media: " + media);
  System.out.println("Varianza: " + varianza);
  System.out.println("Desvianción Estándar: " + desviacion);
 }

}

Programando para varios lenguajes de programación.


Identificando cada uno de los procesos.

Si lo que deseamos es hacer este mismo proceso en otros lenguajes de programació tendremos que identificar que funciones, procesos, operaciones y tipos de variables involucradas.

Las variables:

Identificamos que usamos un arreglo para almacenar cada uno de los datos, variables que almacenaran números decimales o de con punto flotante para almacenar el resultado de cada una de las operaciones.

Las operaciones: 

Las operaciones van desde simples sumas, restas, multiplicaciones y divisiones, pero también necesitamos obtener potencias y la raíz cuadrada, tal vez estás dos ultimas sean las que mas variaciones tengan en los distintos lenguajes.

Funciones:

Si quisiéramos dividir en funciones el programa podríamos definir las siguientes funciones.
  • PedirDatos(), retornaría un arreglo de datos.
  • ObtenerPromedio(arregloDeDatos), el cual recibirá un arreglo de datos enteros y devolverá el valor del promedio (float o double).
  • ObtenerVarianza(datos), de igual manera como parámetro usuaria el arreglo de datos enteros, posiblemente la cantidad de elementos que contiene el arreglo, y el valor de la varianza como valor de retorno.
  • ObtnerDesviacion(varianza), finalmente para obtener la desviación estándar sólo necesitaríamos el valor de la varianza como parámetro, y el método devolverá el valor de la desviación(float o double).
Tal vez algunos de los conceptos que debemos investigar antes de comenzar a programar sean:
  • Como pedir datos del usuario.
  • Como declarar arreglos, obtener cada uno de los elementos, almacenar datos en cada indice, obtener la longitud del arreglo.
  • Como definir funciones o métodos.
  • Como usar operaciones matemáticas (potencia y raíces).
  • Y posiblemente como es la sintaxis de los bucles sea for, while o do-while.
Pero en general la codificación seria muy parecida para la mayoría de los lenguajes de programación, lo más importante siempre será entender el problema que queremos resolver. Una vez tenemos una solución buscamos las herramientas para programar cada uno de los procesos identificados.

Solución para C++.
DesviacionEstandar.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include "math.h"
#include "conio.h"

using namespace std;

void menu(){
  cout << "1) Ingresar datos" << '\n';
  cout << "2) Calcular varianza" << '\n';
  cout << "3) Calcular desviación" << '\n';
  cout << "4) Salir" << '\n';
}

int numeroDatos(){
  int cantidad = 0;
  cout << "Número de datos a ingresar:" << '\n';
  cin >> cantidad;
  return cantidad;
}

int * obtenerDatos(int cantidad){
  int * datos = new int[cantidad];
  for (size_t i = 0; i < cantidad; i++) {
    std::cout << "Ingrese dato " <<i+1 <<": " << '\n';
    cin >> datos[i];
  }
  return datos;
}

float obtener_promedio(int cantidad, int *datos){
  float suma = 0;
  for (size_t i = 0; i < cantidad; i++) {
    suma += datos[i];
  }
  return suma / cantidad;
}

float obtener_varianza(int cantidad, int *datos){
  int n = cantidad;
  float promedio = obtener_promedio(n, datos);
  float varianza = 0;
  for (size_t i = 0; i < n; i++) {
    varianza += pow((datos[i] - promedio), 2.0);
  }
  return varianza / (n -1);
}

float obtener_desviacion(int cantidad, float varianza, int *datos){
  if(varianza == 0){
    float varianza = obtener_varianza(cantidad, datos);
  }
  return sqrt(varianza);
}

int  main(int argc, char const *argv[]) {
  int opcion = -1;
  int cantidad = 0;
  int *datos;
  float varianza = 0;
  float desviacion = 0;
  char pause = 0;
  do{
    menu();
    cin >> opcion;
    if(cin.fail() && cin.rdstate()){
         cout << "NO ES UN NUMERO" << endl;
         opcion = -1;
    }
    switch (opcion) {
      case 1:
          cantidad = numeroDatos();
          datos = obtenerDatos(cantidad);
          break;
      case 2:
          varianza = obtener_varianza(cantidad, datos);
          cout << "varianza: " << varianza << '\n';
          cout << "continuar..." << endl;
          getch();
          break;
      case 3:
          desviacion = obtener_desviacion(cantidad, varianza, datos);
          cout << "Desviación: " << desviacion << '\n';
          cout << "continuar..." << endl;
          getch();
          break;
      default:
        cout << "No existe opción" << '\n';
        break;
    }

  } while (opcion != 4);
  return 0;
}

Solución para python.
DesviacionEstandar.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import math

def menu():
 print ()
 print ("1) Ingresar datos")
 print ("2) Calcular varianza")
 print ("3) Calcular desviación")
 print ("4) Salir")

def obtenerDatos():
 print ("Digite cuantos datos desea ingresar?")
 numeroDatos = int(input())
 datos = []
 for i in range(0, numeroDatos):
  print ("Ingrese dato ", i + 1)
  dato = input()
  datos.append(int(dato))
 return datos

def obtenerPromedio(datos):
 suma = 0
 for dato in datos:
  suma += dato
 return suma / len(datos)

def obtenerVarianza(datos):
 n = len(datos)
 promedio = obtenerPromedio(datos)
 varianza = 0
 for dato in datos:
  varianza += math.pow((dato - promedio), 2)
 return varianza / (n - 1)

def obtenerDesviacion(varianza, datos):
 if(varianza == 0):
  varianza = obtenerVarianza(datos)
  return math.sqrt(varianza)
 elif(varianza > 0):
  return math.sqrt(varianza)

def main():
 salir = False
 datos = []
 varianza = 0
 while not salir:
  opcion = -1
  menu()
  opcion = input()
  if(opcion == '1'):
   datos = obtenerDatos()
  elif(opcion == '2'):
   varianza = obtenerVarianza(datos)
   print ("Valor de varianza: ", varianza)
   input("Enter para continuar...")
  elif(opcion == '3'):
   desviasion = obtenerDesviacion(varianza, datos)
   print ("Valor de Desviacion estandar: ", desviasion)
   input("Enter para continuar...")
  elif(opcion == '4'):
   salir = True
  else:
   print ("No existe opción")

if __name__ == "__main__":
 main()

Comenta tus dudas en la sección de comentarios.

Comentarios

Publicar un comentario