usar tutorial tablas recorrer para leer hacer funciones español documentacion datos data como comandos python list standard-deviation

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.1, puede calcular la desviación estándar usando numpy.std() para:

  • Población numpy.std() : solo use numpy.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))