tablas - pandas python tutorial español pdf
Desviación estándar de una lista (7)
Quiero encontrar la desviación media y estándar de 1er, 2do, ... dígitos de varias listas (Z). Por ejemplo, tengo
A_rank=[0.8,0.4,1.2,3.7,2.6,5.8]
B_rank=[0.1,2.8,3.7,2.6,5,3.4]
C_Rank=[1.2,3.4,0.5,0.1,2.5,6.1]
# etc (up to Z_rank )...
Ahora quiero tomar la media y el *_Rank[0]
de *_Rank[0]
, la media y el *_Rank[1]
de *_Rank[1]
, etc.
(es decir: media y estándar del 1er dígito de todas las listas de varillas (A..Z);
la media y el valor estándar del segundo dígito de todas las listas de (A ...
la media y el estándar del tercer dígito ...; etc.)
Aquí hay un código de Python puro que puede usar para calcular la media y la desviación estándar.
Todo el código a continuación se basa en el módulo de statistics
en Python 3.4+.
def mean(data):
"""Return the sample arithmetic mean of data."""
n = len(data)
if n < 1:
raise ValueError(''mean requires at least one data point'')
return sum(data)/n # in Python 2 use sum(data)/float(n)
def _ss(data):
"""Return sum of square deviations of sequence data."""
c = mean(data)
ss = sum((x-c)**2 for x in data)
return ss
def stddev(data, ddof=0):
"""Calculates the population standard deviation
by default; specify ddof=1 to compute the sample
standard deviation."""
n = len(data)
if n < 2:
raise ValueError(''variance requires at least two data points'')
ss = _ss(data)
pvar = ss/(n-ddof)
return pvar**0.5
Nota: para una mayor precisión al sumar flotantes, el módulo de statistics
utiliza una función personalizada _sum
lugar de la sum
incorporada que he usado en su lugar.
Ahora tenemos, por ejemplo:
>>> mean([1, 2, 3])
2.0
>>> stddev([1, 2, 3]) # population standard deviation
0.816496580927726
>>> stddev([1, 2, 3], ddof=1) # sample standard deviation
0.1
Desde Python 3.4 / PEP450 hay un statistics module
en la biblioteca estándar, que tiene un método stdev
para calcular la desviación estándar de los elementos como el tuyo:
>>> A_rank = [0.8, 0.4, 1.2, 3.7, 2.6, 5.8]
>>> import statistics
>>> statistics.stdev(A_rank)
2.0634114147853952
En Python 2.7 puede usar numpy.std()
NumPy para numpy.std()
la desviación estándar de la población .
En Python 3.4 statistics.stdev()
devuelve la desviación estándar de la muestra. La función pstdv()
es la misma que numpy.std()
.
En Python 2.7.1, puede calcular la desviación estándar usando numpy.std()
para:
- Población
numpy.std()
: solo usenumpy.std()
sin argumentos adicionales además de su lista de datos. - Estándar de muestra : debe pasar ddof (es decir, grados de libertad Delta) establecido en 1, como en el siguiente ejemplo:
numpy.std (<su-lista>, ddof = 1 )
El divisor utilizado en los cálculos es N - ddof , donde N representa la cantidad de elementos. Por defecto, ddof es cero.
Calcula std de muestra en lugar de std de población.
Las otras respuestas cubren cómo hacer std dev en python lo suficiente, pero nadie explica cómo hacer el bizarro cruce que ha descrito.
Voy a suponer que AZ es toda la población. Si no, vea la respuesta de Ome sobre cómo hacer una inferencia a partir de una muestra.
Entonces, para obtener la desviación estándar / media del primer dígito de cada lista, necesitarías algo como esto:
#standard deviation
numpy.std([A_rank[0], B_rank[0], C_rank[0], ..., Z_rank[0]])
#mean
numpy.mean([A_rank[0], B_rank[0], C_rank[0], ..., Z_rank[0]])
Para acortar el código y generalizarlo a cualquier dígito n, use la siguiente función que generé para usted:
def getAllNthRanks(n):
return [A_rank[n], B_rank[n], C_rank[n], D_rank[n], E_rank[n], F_rank[n], G_rank[n], H_rank[n], I_rank[n], J_rank[n], K_rank[n], L_rank[n], M_rank[n], N_rank[n], O_rank[n], P_rank[n], Q_rank[n], R_rank[n], S_rank[n], T_rank[n], U_rank[n], V_rank[n], W_rank[n], X_rank[n], Y_rank[n], Z_rank[n]]
Ahora puedes obtener simplemente el stdd y la media de todos los enésimos lugares de AZ así:
#standard deviation
numpy.std(getAllNthRanks(n))
#mean
numpy.mean(getAllNthRanks(n))
Me gustaría poner A_Rank
et al en una matriz 2D NumPy , y luego usar numpy.mean()
y numpy.std()
para calcular las medias y las desviaciones estándar:
In [17]: import numpy
In [18]: arr = numpy.array([A_rank, B_rank, C_rank])
In [20]: numpy.mean(arr, axis=0)
Out[20]:
array([ 0.7 , 2.2 , 1.8 , 2.13333333, 3.36666667,
5.1 ])
In [21]: numpy.std(arr, axis=0)
Out[21]:
array([ 0.45460606, 1.29614814, 1.37355985, 1.50628314, 1.15566239,
1.2083046 ])
código puro de python:
from math import sqrt
def stddev(lst):
mean = float(sum(lst)) / len(lst)
return sqrt(float(reduce(lambda x, y: x + y, map(lambda x: (x - mean) ** 2, lst))) / len(lst))