[Python-es] Realizar operaciones estadisticas en python

Boris Vladimir Comi glez_b en comunidad.unam.mx
Lun Oct 21 21:34:12 CEST 2013


El siguiente c?digo intenta calcular el promedio resultante de la direcci?n y magnitud del viento, as? como promedios diarios de temperatura, humedad y la suma diaria de la precipitaci?n. Mi base de datos mensual tiene las siguientes columnas:


data

     Fecha      Hora    DirViento  MagViento Temperatura  Humedad  PreciAcu
0   2011/07/01  00:00        318        6.6        21.22      100       1.7
1   2011/07/01  00:15        342        5.5        21.20      100       1.7
2   2011/07/01  00:30        329        6.6        21.15      100       4.8
3   2011/07/01  00:45        279        7.5        21.11      100       4.2
4   2011/07/01  01:00        318        6.0        21.16      100       2.5

Lo primero que hago es convertir a radianes la columna DirViento


dir_rad=[]
for i in range(0, len(data['DirViento'])):
    dir_rad.append(data['DirViento'][i]*(pi/180.0))
data['DirViento']=around(dir_rad,1)


Ahora obtengo las columnas de las componentes: u y v del viento y la a?adimos a data


Uviento=[]
Vviento=[]
for i in range(0,len(data['MagViento'])):
    Uviento.append(data['MagViento'][i]*sin(data[DirViento][i]))
    Vviento.append(data['MagViento'][i]*cos(data[DirViento][i]))
data['u']=around(Uviento,1)
data['v']=around(Vviento,1)

data

Data columns:
Fecha           51  non-null values
Hora            51  non-null values
DirViento       51  non-null values
MagViento       51  non-null values
Temperatura     51  non-null values
Humedad         51  non-null values
PreciAcu        51  non-null values
u               51  non-null values
v               51  non-null values
dtypes: float64(6), int64(2), object(2)

Ahora indexamos los datos y agrupamos


index=data.set_index(['Fecha','Hora'],inplace=True)

grouped = index.groupby(level=0)


por ejemplo

data['u']

Fecha       Hora
2011/07/01  00:00    -4.4
            00:15    -1.7
            00:30    -3.4
            00:45    -7.4
            01:00    -4.0
2011/07/02  00:00    -4.5
            00:15    -4.2
            00:30    -7.6
            00:45    -3.8
            01:00    -2.0
2011/07/03  00:00    -6.3
            00:15   -13.7
            00:30    -0.3
            00:45    -2.5
            01:00    -2.7

Ahora obtenemos la direccion media resultante para cada d?a


grouped.apply(lambda x: ((scipy.arctan2(mean(x['uu']),mean(x['vv'])))/(pi/180.0)))

 Fecha
 2011/07/01   -55.495677
 2011/07/02   -39.176537
 2011/07/03   -51.416339

al resultado anterior le debo aplicar las siguientes condiciones


for i in grouped.apply(lambda x: ((scipy.arctan2(mean(x['uu']),mean(x['vv'])))/(pi/180.0))):
    if i < 180:
        i=i+180
    else:
        if i > 180:
            i=i-180
        else:
            i=i
    print i

y obtenemos la siguiente salida

124.504323033
140.823463279
128.5836605

?Por qu? no muestra la columna de fechas? c?mo se logra esto?
C?mo incluir el resultado anterior a la columna DirRes y que ?sta se agregue a la siguiente salida


stat_cea = grouped.agg({'DirRes':np.mean,'Temperatura':np.mean,'Humedad':np.mean,'PreciAcu':np.sum})



stat_cea
Fecha        DirRes     Humedad          PreciAcu  Temperatura

2011/07/01             100.000000          30.4      21.367059
2011/07/02             99.823529           18.0      21.841765
2011/07/03             99.823529            4.0      21.347059

Agradecer? su valiosa ayuda
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20131021/782e2832/attachment.html>


Más información sobre la lista de distribución Python-es