Generamos un arreglo inicial para operar sobre él.

src/01.py

x = np.random.randn( 100 ) * 5 + 10 

1. Suma de los elementos

Suma de todos los elementos numpy.sum:

x.sum()

Ejemplos:

In [16]: np.sum([0.5, 1.5])
Out[16]: 2.0

In [17]: np.sum([0.5, 0.7, 0.2, 1.5], dtype=np.int32)
Out[17]: 1

In [18]: np.sum([[0, 1], [0, 5]])
Out[18]: 6

In [19]: np.sum([[0, 1], [0, 5]], axis=0)
Out[19]: array([0, 6])

In [20]: np.sum([[0, 1], [0, 5]], axis=1)
Out[20]: array([1, 5])

2. Media aritmética

La media aritmética (también llamada promedio o simplemente media), se obtiene con la suma de un conjunto de valores dividida entre el número total de sumandos.

Función numpy.mean:

x.mean()

Ejemplos:

In [2]: import numpy as np

In [3]: a = np.array([[1, 2], [3, 4]])

In [4]: np.mean(a)
Out[4]: 2.5

In [5]: np.mean(a, axis=0)
Out[5]: array([2., 3.])

In [6]: np.mean(a, axis=1)
Out[6]: array([1.5, 3.5])

Ver:

3. Mediana

En el ámbito de la estadística, la mediana representa el valor de la variable de posición central en un conjunto de datos ordenados. Se le denota mediana.

Si la serie tiene un número par de puntuaciones, la mediana es la media entre las dos puntuaciones centrales.

Ejemplo. 7, 8, 9, 10, 11, 12 Me = 9,5 = (9+10)/2

Función numpy.median

Ejemplos:

In [7]: a = np.array([[10, 7, 4], [3, 2, 1]])

In [8]: a
Out[8]: 
array([[10,  7,  4],
       [ 3,  2,  1]])

In [9]: np.median(a)
Out[9]: 3.5

In [10]: np.median(a, axis=0)
Out[10]: array([6.5, 4.5, 2.5])

In [11]: np.median(a, axis=1)
Out[11]: array([7., 2.])

4. Desviación estándar

Desviación estándar (numpy.ndarray.std)((también conocida como desviación estándar y desvío típico) es una medida que se utiliza para cuantificar la variación o la dispersión de un conjunto de datos numéricos. La desviación estándar es la raíz cuadrada de la varianza.

Una desviación estándar baja indica que la mayor parte de los datos de una muestra tienden a estar agrupados cerca de su media (también denominada el valor esperado), mientras que una desviación estándar alta indica que los datos se extienden sobre un rango de valores más amplio.

x.std()

Ejemplos:

In [12]: a = np.array([[1, 2], [3, 4]])

In [13]: np.std(a)
Out[13]: 1.118033988749895

In [14]: np.std(a, axis=0)
Out[14]: array([1., 1.])

In [15]: np.std(a, axis=1)
Out[15]: array([0.5, 0.5])

5. Varianza

La varianza de una variable aleatoria es una medida de dispersión definida como la esperanza del cuadrado de la desviación de dicha variable respecto a su media. Su unidad de medida corresponde al cuadrado de la unidad de medida de la variable: por ejemplo, si la variable mide una distancia en metros, la varianza se expresa en metros al cuadrado. La varianza tiene como valor mínimo 0. La desviación estándar (raíz cuadrada positiva de la varianza) es una medida de dispersión alternativa, expresada en las mismas unidades que los datos de la variable objeto de estudio.

Hay que tener en cuenta que la varianza puede verse muy influida por los valores atípicos y no se aconseja su uso cuando las distribuciones de las variables aleatorias tienen colas pesadas. En tales casos se recomienda el uso de otras medidas de dispersión más robustas.

Ejemplo de cálculo: 2, 3, 6, 8, 11.

Media: 6

Varianza (numpy.ndarray.var).

x.var()

Ver:

6. Unir arrays

Unimos los arrays de forma vertical:

y = np.random.randn( 100 ) * 3 - 7
xy = np.vstack( [ x, y ] )
print(xy.shape) #  (2, 100)

7. Covarianza

En probabilidad y estadística, la covarianza es un valor que indica el grado de variación conjunta de dos variables aleatorias respecto a sus medias. Es el dato básico para determinar si existe una dependencia entre ambas variables y además es el dato necesario para estimar otros parámetros básicos, como el coeficiente de correlación lineal o la recta de regresión.

numpy.cov estima una matriz de covarianza:

print('Covariance matrix:\n\n',np.cov(xy))

Ver:

Ejemplos:

In [1]: import numpy as np

In [2]: x = np.array([[0, 3, 4], [1, 2, 4], [3, 4, 5]])

In [3]: print("Shape of array:\n", np.shape(x))
Shape of array:
 (3, 3)

In [4]: print("Covariance matrix of x:\n", np.cov(x))
Covariance matrix of x:
 [[4.33333333 2.83333333 2.        ]
 [2.83333333 2.33333333 1.5       ]
 [2.         1.5        1.        ]]
In [5]: x = [1.23, 2.12, 3.34, 4.5]

In [6]: y = [2.56, 2.89, 3.76, 3.95]

In [7]: # find out covariance with respect  columns
   ...: cov_mat = np.stack((x, y), axis = 0)

In [8]: print(np.cov(cov_mat))
[[2.03629167 0.9313    ]
 [0.9313     0.4498    ]]

Ejercicio

8. Histogramas

En estadística, un histograma es una representación gráfica de una variable en forma de barras, donde la superficie de cada barra es proporcional a la frecuencia de los valores representados. Sirven para obtener una “primera vista” general, o panorama, de la distribución de la población, o de la muestra, respecto a una característica, cuantitativa y continua (como la longitud o el peso). De esta manera ofrece una visión de grupo permitiendo observar una preferencia, o tendencia, por parte de la muestra o población por ubicarse hacia una determinada región de valores dentro del espectro de valores posibles (sean infinitos o no) que pueda adquirir la característica. Así pues, podemos evidenciar comportamientos, observar el grado de homogeneidad, acuerdo o concisión entre los valores de todas las partes que componen la población o la muestra, o, en contraposición, poder observar el grado de variabilidad, y por ende, la dispersión de todos los valores que toman las partes, también es posible no evidenciar ninguna tendencia y obtener que cada miembro de la población toma por su lado y adquiere un valor de la característica aleatoriamente sin mostrar ninguna preferencia o tendencia.

La función numpy.histogram computa un histograma a partir de un conjunto de datos.

Ejemplos src/02.py:

import numpy as np 
   
a = np.array([89, 34, 56, 87, 90, 23, 45, 12, 65, 78, 9, 34, 12, 11, 2, 65, 78, 82, 28, 78]) 

# Generamos un vector de 100 elementos con valores aleatorios entre 0 y 10
a = np.random.randint(0,11,100)
print(a)

histogram = np.histogram(a) 
print(histogram) 
'''
[ 6  6  6  7  0  7  7  4  3  8 10  0  8  3 10  0 10  7  8  6  0  1  0  2
  9  8  2  5  3  7  4  6  3 10  3  4  2  0  4  4  3  2  9  0  1  7 10  7
 10  9  8  7  5  4  9  0  3  9 10 10  3 10  2  2  5  4  0  6  9  2  8  5
  2  9  6  2  5  8  9  5  6  4  5  3  6  1 10  4  4  2 10  7  9  8  1  5
  7  6  4  2]
(array([ 9,  4, 11,  9, 11,  8, 10, 10,  8, 20]), array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.]))
'''

Retorna una tupla con dos arrays, el primero contiene los valores del histograma, conocido como densidad o peso de cada valor según su frecuencia de aparición en el array pasado como parámetro de entrada.

Ver:

8.1. Definir intervalos (bins)

Debemos dividir los datos agrupándolos por intervalos consecutivos y que no se solapen entre sí. Así podremos representar la frecuencia de cada uno de estos intervalos. En un histograma cada una de las barras corresponde a un intervalo diferente. Por ejemplo, si nuestra muestra de datos contiene los valores 2, 4, 5, 5, 8, 9 y 9, podríamos dividir el conjunto en dos intervalos: de 1 a 5 y de 6 a 10.

En el ejemplo inferior, el valor 9 tiene 2 apariciones y el 8 tiene 1, ambos están en el intervalo 6,10, por eso en el resultado el último elemento del array con los pesos es 3.

src/04.py

import numpy as np 
   
a = np.array([2, 2, 5, 8, 9, 9]) 

histogram = np.histogram(a,bins=[1,5,6,10]) 
print(histogram) # (array([2, 1, 3]), array([ 1,  5,  6, 10]))

Si bins es un int, define el número de bins de igual ancho en el rango dado (10, por defecto).

src/05.py

import numpy as np 

edades = [12, 15, 13, 12, 18, 20, 19, 20, 13, 12, 13, 17, 15, 16, 13, 14, 13, 17, 19]

#calculamos las frecuencias para 8 intervalos (bins=8)
frecuencias, extremos = np.histogram(edades, bins=8)
print(frecuencias, extremos)

#calculamos las frecuencias para 9 intervalos (bins=9)
#indicamos que los valores van de 12 a 21 para incluir el intervalo 20-21
frecuencias, extremos = np.histogram(edades, bins=9, range=(12,21))
print(frecuencias, extremos)

#calculamos las frecuencias para intervalos personalizados
# [10, 13) [13, 15) [15, 20]
frecuencias, extremos = np.histogram(edades, bins=(10, 13, 15, 20))
print(frecuencias, extremos)

Salida:

[3 5 1 2 1 2 1 4] [12. 13. 14. 15. 16. 17. 18. 19. 20.]
[3 5 1 2 1 2 1 2 2] [12. 13. 14. 15. 16. 17. 18. 19. 20. 21.]
[ 3  6 10] [10 13 15 20]

Ver:

8.2. Representación gráfica con Matplotlib

src/03.py

from matplotlib import pyplot as plt
import numpy as np


# Creating dataset
a = np.random.randint(100, size =(50))

# Creating plot
#fig = plt.figure(figsize =(10, 7))

plt.hist(a, bins = [0, 10, 20, 30,
					40, 50, 60, 70,
					80, 90, 100])

plt.title("Numpy Histogram")

# show plot
plt.show()

Ver:

9. Recursos

10. Enlaces externos