[Python-es] Realizar operaciones estadisticas en python

108 views
Skip to first unread message

Boris Vladimir Comi

unread,
Oct 21, 2013, 3:34:12 PM10/21/13
to La lista de python en castellano
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

Kiko

unread,
Oct 21, 2013, 4:06:17 PM10/21/13
to La lista de python en castellano


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
En lugar de aplicar un bucle puedes meterle un filtro a la columna de direcciones con las condiciones del bucle y volver a llenar la columna de direcciones con los nuevos valores y después le aplicas el np.mean a todas las columnas

Reply all
Reply to author
Forward
0 new messages