[SciPy-User] scikits.timeseries question

Robert Ferrell ferrell at diablotech.com
Mon Nov 30 21:59:32 EST 2009


On Nov 30, 2009, at 6:16 PM, Christopher Barker wrote:

> Pierre GM wrote:
>
>> Ah OK. Well, the answer is: that depends. iIf you know that your
>> dates are just in daily increments from 2001-01-01 (like a range),
>> then just use start_date and length.
>
> right -- but I don't know that.
>
>> If you may have several duplicated dates (like 2001-01-01,
>> 2001-01-02, 2001-01-02, 2001-01-03...), then the easiest is probably:
>>
>>>>> da = ts.date_array(np.array(0,1,1,2)+sd)
>
> nope -- not duplicated, but maybe there are missing ones. The point is
> that I have an array of "days since", and I want array of
> timeseries.dates (which is a DateArray, yes?)

I don't think so.  An array of dates is not a DateArray.

In [98]: sd = ts.Date('d', '2001-01-01')

In [99]: zeros(4) + sd
Out[99]: array([01-Jan-2001, 01-Jan-2001, 01-Jan-2001, 01-Jan-2001],  
dtype=object)

This seems natural to me, (array + Date = array) although I do have to  
include an extra line sometimes to get a DateArray if I need it.  If I  
need a timeseries, sometimes I can skip making the DateArray explicitly.

In [109]: a = arange(4) + sd

In [110]: a
Out[110]: array([01-Jan-2001, 02-Jan-2001, 03-Jan-2001, 04-Jan-2001],  
dtype=object)

In [111]: ts.time_series([1,2,3,4], dates=a)
Out[111]:
timeseries([1 2 3 4],
            dates = [01-Jan-2001 ... 04-Jan-2001],
            freq  = D)

>
>> np.array(...) + sd gives you a ndarray of Date objects (so its dtype
>> is np.object), and you use that as the input of date_array. The
>> frequency should be recognized properly.
>
> OK -- though it seems I SHOULD be able to go straight to an DateArray,

Is the issue that sd is a Date and not a DateArray?  You can always  
make a DataArray with sd, of the correct length, and then add to that:

In [83]: sd = ts.Date('d', '2001-01-01')

In [84]: d1 = ts.date_array(zeros(4) + sd)

In [85]: d1
Out[85]:
DateArray([01-Jan-2001, 01-Jan-2001, 01-Jan-2001, 01-Jan-2001],
           freq='D')

In [86]: d1 + array([0,2,3,5])
Out[86]:
DateArray([01-Jan-2001, 03-Jan-2001, 04-Jan-2001, 06-Jan-2001],
           freq='D')


I'm probably telling you things that are obvious and are not  
addressing your question.

> and I'm still confused about what this means:
>
>>> In [43]: da = ts.date_array((1,2,3,4), start_date=sd)

This throws an exception for me.

<type 'exceptions.ValueError'>: year=1 is before 1900; the datetime  
strftime() methods require year >= 1900

-robert



More information about the SciPy-User mailing list