<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Importamos las librerías necesarias
Step1:  Importamos las librerías creadas para trabajar
Step2:  Generamos los datasets de todos los días
En primer lugar se extraen los datos de todos los archivos
    de cada día y se genera una lista de tablas separadas por motor
Step3:  Se procesan las listas anteriores, se concatenan por motor según
    la hora de los registros y se rellenan los espacios vacíos con
    datos NaN, luego se juntan de costado las tablas (join) y se
    le añade el sufijo _m1 y _m2 para diferenciar las columnas
Step4:  Cálculo de promedios
Día 4
Se añade la potencia calculada como $V\cdot{I}$
Step5:  Se calcula la potencia promedio de todos los datos positivos que se obtienen de cada motor
Step6:  Se observa que la variación de potencia promedio tomando los datos solo entre aquellos en donde existe información de ambos motores no es significativa respecto a la potencia promedio tomando el total de datos de cada motor por separado, sin usar la muestra que coincida en espacio temporal
Step7:  Se verifica con el segundo motor, que es el que tiene menos potencia y menos datos, en el día 2 es un 80% y el primero casi el 100%, en los otros días puede variar la apreciación
Potencia promedio consumida con 360 Kg último día ambos motores solo acelerendo, pot > 0
Step8:  Potencia promedio entregada por regeneración
Step9:  Potencia promedio dia 4 consumida y regenerada a la vez
Step10:  Impacto uso de regenerativo ultimo dia de carrera
Step11:  ~~Promedio día 4 incluyendo recargo de celdas.. solo en intervalo donde existen datos de ambos motores~~
Step12:  Impacto carga de celdas
Step13:  Validación en un intervalo de competencia solamente, no luego de llegar y recargar.. solo en carrera
Step14:  Máximo absoluto día 4
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
Explanation: Importamos las librerías necesarias
End of explanation
import ext_datos as ext
import procesar as pro
import time_plot as tplt
Explanation: Importamos las librerías creadas para trabajar
End of explanation
dia1 = ext.extraer_data('dia1')
cd ..
dia2 = ext.extraer_data('dia2')
cd ..
dia3 = ext.extraer_data('dia3')
cd ..
dia4 = ext.extraer_data('dia4')
Explanation: Generamos los datasets de todos los días
En primer lugar se extraen los datos de todos los archivos
    de cada día y se genera una lista de tablas separadas por motor
End of explanation
motoresdia1 = pro.procesar(dia1)
motoresdia2 = pro.procesar(dia2)
motoresdia3 = pro.procesar(dia3)
motoresdia4 = pro.procesar(dia4)
Explanation: Se procesan las listas anteriores, se concatenan por motor según
    la hora de los registros y se rellenan los espacios vacíos con
    datos NaN, luego se juntan de costado las tablas (join) y se
    le añade el sufijo _m1 y _m2 para diferenciar las columnas
End of explanation
motoresdia4['pot_m2']=motoresdia4.busCurrent_m2*motoresdia4.busVoltage_m2
motoresdia4['pot_m1']=motoresdia4.busCurrent_m1*motoresdia4.busVoltage_m1
motoresdia3['pot_m2']=motoresdia3.busCurrent_m2*motoresdia3.busVoltage_m2
motoresdia3['pot_m1']=motoresdia3.busCurrent_m1*motoresdia3.busVoltage_m1
motoresdia2['pot_m2']=motoresdia2.busCurrent_m2*motoresdia2.busVoltage_m2
motoresdia2['pot_m1']=motoresdia2.busCurrent_m1*motoresdia2.busVoltage_m1
motoresdia1['pot_m2']=motoresdia1.busCurrent_m2*motoresdia1.busVoltage_m2
motoresdia1['pot_m1']=motoresdia1.busCurrent_m1*motoresdia1.busVoltage_m1
Explanation: Cálculo de promedios
Día 4
Se añade la potencia calculada como $V\cdot{I}$
End of explanation
promediodia4_pot_m1_todos_positivos=motoresdia4[motoresdia4.pot_m1>0].pot_m1.dropna().mean()
promediodia4_pot_m1_todos_positivos
promediodia4_pot_m1_algunos_positivos = motoresdia4[motoresdia4.pot_m1>0].dropna().pot_m1.mean()
promediodia4_pot_m1_algunos_positivos
Explanation: Se calcula la potencia promedio de todos los datos positivos que se obtienen de cada motor
End of explanation
promediodia4_pot_m2_todos_positivos = motoresdia4[motoresdia4.pot_m2>0].pot_m2.dropna().mean()
promediodia4_pot_m2_todos_positivos
promediodia4_pot_m2_algunos_positivos = motoresdia4[motoresdia4.pot_m2>0].dropna().pot_m2.mean()
promediodia4_pot_m2_algunos_positivos
Explanation: Se observa que la variación de potencia promedio tomando los datos solo entre aquellos en donde existe información de ambos motores no es significativa respecto a la potencia promedio tomando el total de datos de cada motor por separado, sin usar la muestra que coincida en espacio temporal
End of explanation
pot_prom_ambos_dia4 = promediodia4_pot_m1_algunos_positivos+promediodia4_pot_m2_algunos_positivos
pot_prom_ambos_dia4
Explanation: Se verifica con el segundo motor, que es el que tiene menos potencia y menos datos, en el día 2 es un 80% y el primero casi el 100%, en los otros días puede variar la apreciación
Potencia promedio consumida con 360 Kg último día ambos motores solo acelerendo, pot > 0
End of explanation
promediodia4_pot_m1_algunos_negativos = motoresdia4[motoresdia4.pot_m1<0].dropna().pot_m1.mean()
promediodia4_pot_m1_algunos_negativos 
promediodia4_pot_m2_algunos_negativos = motoresdia4[motoresdia4.pot_m2<0].dropna().pot_m2.mean()
promediodia4_pot_m2_algunos_negativos 
pot_prom_reg_ambos_dia4 = promediodia4_pot_m1_algunos_negativos+promediodia4_pot_m2_algunos_negativos
pot_prom_reg_ambos_dia4
abs(pot_prom_reg_ambos_dia4/pot_prom_ambos_dia4)
Explanation: Potencia promedio entregada por regeneración
End of explanation
promediodia4_pot_m1_algunos_ambos = motoresdia4[motoresdia4.pot_m1!=0].dropna().pot_m1.mean()
promediodia4_pot_m1_algunos_ambos 
promediodia4_pot_m2_algunos_ambos = motoresdia4[motoresdia4.pot_m2!=0].dropna().pot_m2.mean()
promediodia4_pot_m2_algunos_ambos 
pot_prom_cons_y_reg = promediodia4_pot_m1_algunos_ambos+promediodia4_pot_m2_algunos_ambos
pot_prom_cons_y_reg
Explanation: Potencia promedio dia 4 consumida y regenerada a la vez
End of explanation
1 - pot_prom_cons_y_reg/(pot_prom_ambos_dia4)
motoresdia4.pot_m2[10000:30000].plot()
Explanation: Impacto uso de regenerativo ultimo dia de carrera
End of explanation
promediodia4_pot_m1_algunos_todo = motoresdia4.dropna().pot_m1.mean()
promediodia4_pot_m1_algunos_todo 
promediodia4_pot_m2_algunos_todo = motoresdia4.dropna().pot_m2.mean()
promediodia4_pot_m2_algunos_todo 
promediototalconsumo = promediodia4_pot_m2_algunos_todo+promediodia4_pot_m1_algunos_todo
promediototalconsumo
Explanation: ~~Promedio día 4 incluyendo recargo de celdas.. solo en intervalo donde existen datos de ambos motores~~
End of explanation
1-promediototalconsumo/pot_prom_cons_y_reg
Explanation: Impacto carga de celdas
End of explanation
promediodia4_pot_m1_algunos_todo_val = motoresdia4.dropna().pot_m1[0:110000].mean()
promediodia4_pot_m1_algunos_todo_val 
promediodia4_pot_m2_algunos_todo_val = motoresdia4.dropna().pot_m2[0:110000].mean()
promediodia4_pot_m2_algunos_todo_val
promediototalconsumo_val = promediodia4_pot_m2_algunos_todo_val+promediodia4_pot_m1_algunos_todo_val
promediototalconsumo_val
1-promediototalconsumo_val/pot_prom_cons_y_reg
jdj
1+1
Explanation: Validación en un intervalo de competencia solamente, no luego de llegar y recargar.. solo en carrera
End of explanation
maximo_m1
len(motoresdia4[motoresdia4.pot_m1<0].pot_m1.dropna())
promedio_pot_m1_algunos=motoresdia4[motoresdia4.pot_m1<0].dropna().pot_m1.mean()
len(motoresdia4[motoresdia4.pot_m1<0].dropna().pot_m1)
motoresdia4[motoresdia4.pot_m1<0].dropna().pot_m1.mean()
motoresdia4[motoresdia4.pot_m2<0].dropna().pot_m2.mean()
motoresdia4[motoresdia4.pot_m2!=0].pot_m2.dropna().mean()
1343+1130
motoresdia3['pot_m2']=motoresdia3.busCurrent_m2*motoresdia3.busVoltage_m2
motoresdia3['pot_m1']=motoresdia3.busCurrent_m1*motoresdia3.busVoltage_m1
motoresdia3[motoresdia3.pot_m1<0].pot_m1.dropna().mean()
motoresdia3[motoresdia3.pot_m2<0].pot_m2.dropna().mean()
motoresdia2['pot_m2']=motoresdia2.busCurrent_m2*motoresdia2.busVoltage_m2
motoresdia2['pot_m1']=motoresdia2.busCurrent_m1*motoresdia2.busVoltage_m1
motoresdia2[motoresdia2.pot_m1<0].pot_m1.dropna().mean()
motoresdia2[motoresdia2.pot_m2<0].pot_m2.dropna().mean()
motoresdia1['pot_m2']=motoresdia1.busCurrent_m2*motoresdia1.busVoltage_m2
motoresdia1['pot_m1']=motoresdia1.busCurrent_m1*motoresdia1.busVoltage_m1
motoresdia1[motoresdia1.pot_m1!=0].pot_m1.dropna().mean()
motoresdia1[motoresdia1.pot_m2!=0].pot_m2.dropna().mean()
import scipy.integrate as integr
integr.trapz(motoresdia4.pot_m2.dropna(),motoresdia4.pot_m2.dropna().index.values)
from scipy import integrate
import pandas as pd
import numpy as np
def integrate_method(self, how='trapz', unit='s'):
    '''Numerically integrate the time series.
    @param how: the method to use (trapz by default)
    @return 
    Available methods:
     * trapz - trapezoidal
     * cumtrapz - cumulative trapezoidal
     * simps - Simpson's rule
     * romb - Romberger's rule
    See http://docs.scipy.org/doc/scipy/reference/integrate.html for the method details.
    or the source code
    https://github.com/scipy/scipy/blob/master/scipy/integrate/quadrature.py
    '''
    available_rules = set(['trapz', 'cumtrapz', 'simps', 'romb'])
    if how in available_rules:
        rule = integrate.__getattribute__(how)
    else:
        print('Unsupported integration rule: %s' % (how))
        print('Expecting one of these sample-based integration rules: %s' % (str(list(available_rules))))
        raise AttributeError
    
    result = rule(self.values, self.index.astype(np.int64) / 10**9)
    #result = rule(self.values)
    return result
pd.TimeSeries.integrate = integrate_method
energia1=motoresdia2.dropna().pot_m1.integrate('romb')/3600
energia1
energia2=motoresdia2.dropna().pot_m2.integrate()/3600
energia2
energiatotal=energia1+energia2
energiatotal
energiaconsumida2=motoresdia2[motoresdia2.pot_m2<0].dropna().pot_m2.integrate()/3600
energiaconsumida2
energiaconsumida1=motoresdia2[motoresdia2.pot_m1<0].dropna().pot_m2.integrate()/3600
energiaconsumida1
energiaconsumidatotal=energiaconsumida1+energiaconsumida2
energiaconsumidatotal
(energiaconsumidatotal- energiatotal)/ energiaconsumidatotal
(energia1- energiaconsumida1)/ energiaconsumida1
Explanation: Máximo absoluto día 4
End of explanation
<END_TASK>