Para establecer los efectos estacionales sobre el uso de energía, necesito alinear la información de uso de energía que tengo de una base de datos de facturación con temperaturas mensuales.División de series de tiempo irregulares en promedios mensuales regulares - R
Estoy trabajando con un conjunto de datos de facturación que tiene facturas de diferentes longitudes y fechas de inicio y finalización, y me gustaría obtener el promedio mensual de cada cuenta dentro de cada mes. Por ejemplo, tengo una base de datos de facturación que tiene las siguientes características:
acct amount begin end days
1 2242 11349 2009-10-06 2009-11-04 29
2 2242 12252 2009-11-04 2009-12-04 30
3 2242 21774 2009-12-04 2010-01-08 35
4 2242 18293 2010-01-08 2010-02-05 28
5 2243 27217 2009-10-06 2009-11-04 29
6 2243 117 2009-11-04 2009-12-04 30
7 2243 14543 2009-12-04 2010-01-08 35
me gustaría encontrar la manera de coaccionar a estas series de tiempo algo irregular (por cada cuenta) para obtener la cantidad promedio por día dentro de cada mes que es atravesado dentro de cada proyecto de ley, de tal manera que:
acct amount begin end days avgamtpday
1 2242 11349 2009-10-01 2009-10-31 31 X
2 2242 12252 2009-11-01 2009-11-30 30 X
3 2242 21774 2009-12-01 2010-12-31 31 X
4 2242 18293 2010-01-01 2010-01-31 31 X
4 2242 18293 2010-02-01 2010-02-28 28 X
5 2243 27217 2009-10-01 2009-10-31 31 X
6 2243 117 2009-11-01 2009-11-30 30 X
7 2243 14543 2009-12-01 2009-12-31 30 X
7 2243 14543 2010-01-01 2010-01-31 31 X
estoy bastante agnóstica a cualquier herramienta puede hacer esto, ya que sólo tiene que hacerlo una vez.
Una arruga adicional es que la mesa tiene aproximadamente 150,000 filas de largo, lo que no es realmente muy grande para la mayoría de los estándares, pero lo suficientemente grande como para dificultar una solución de lazo en R. He investigado el uso de los paquetes zoo, xts y tempdisagg en R. Empecé a escribir un bucle muy feo que dividiría cada factura, luego creé una fila por cada mes dentro de una factura existente y luego tapply() para resumir por accts y meses, pero sinceramente, no pude ver cómo hacerlo de manera eficiente.
En MySQL, lo he intentado esto:
crear o sustituir vista v3 como seleccionar unión 1 n all select 1 union all select 1;
crear o reemplazar la vista v como seleccionar 1 n de v3 a, v3 b union all seleccionar 1;
conjunto @n = 0;
drop table if exists calendar; crear calendario de tabla (clave primaria de fecha dt);
insertar en el calendario
select cast ('2008-1-1' + intervalo @n: = @ n + 1 día como fecha) como dt de v a, v b, v c, v d, v e, v;seleccione ACCT, cantidad, inicio, fin, billAmtPerDay, suma (billAmtPerDay), MonthAmt, recuento () Días, suma (billAmtPerDay)/recuento () AverageAmtPerDay, años (dt), el mes (dt) FROM (seleccione *, cantidad/días billAmtPerDay de facturas b calendario de unión interna c en dt entre inicio y fin y comience <> dt) x grupo por acct, cantidad, inicio, fin, fecha de la factura, año (dt), mes (dt);
Pero por razones que no entiendo, a mi servidor no le gusta esta tabla, y se cuelga de la unión interna, incluso cuando realizo los diferentes cálculos. Estoy investigando si hay algún límite de memoria temporal en él.
Gracias!
¿Sus períodos de facturación coinciden con los meses reales, o es alguna función "Día X de cada mes es cuando comienza un nuevo período" tipo de situación? –
Los períodos de facturación son irregulares, por lo que la mayoría de las facturas tienen un promedio de 30 +/- 2 días, pero con algunas facturas de hasta 90 días o más. – bikeclub
Entonces necesitaría algún método para calcular un período de facturación dado solo una fecha, para que pueda hacer la agrupación adecuada. –