Re: why DateListPlot is so slow?
- To: mathgroup at smc.vnet.net
- Subject: [mg79948] Re: why DateListPlot is so slow?
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Thu, 9 Aug 2007 05:24:41 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <f9c0ae$5o4$1@smc.vnet.net>
Arkadiusz.Majka at gmail.com wrote:
> Hi,
>
> I have a list (a time series):
>
> data={{00:00:30,x1},{00:01:00,x2},{00:01:30,x3},....}
>
> at equally spaced time intervals (30 seconds). The length od data is
> 8100 (24 h)
>
> DateListPlot[data] works fine but takes 28 sec, since
> ListPlot[data[[All,2]]] does it in less than 0.1 sec....
>
> Can you explain me why DateListPlot is so time consuming? Can we
> improve it?
Hi Arek,
It seems that the slowness of *DateListPlot* is due to the conversion
process that occurs to set up the date/time in canonical form. First we
generate some random data and compare *DateListPlot* against *ListPlot*.
In[1]:= data = Module[{t = 0},
Table[{DateString[t += 10 + RandomInteger[{-1, 1}], "Time"],
40000. + 10000*Sin[t/20000] + RandomReal[{-100, 100}]},
{8100}]];
Timing[DateListPlot[data]][[1]]
Timing[ListPlot[data[[All, 2]], Axes -> None, Frame -> True,
GridLines -> {Automatic, None}]][[1]]
Out[2]= 33.172
Out[3]= 0.016
My understanding of how *DateListPlot* works is that the function first
converts the date/time data in canonical form, canonical form that must
be in the form {yy, mm, dd, hh, mn, ss}. (The function in charge of the
conversation is set up with the option *DateFunction*.) This seem to be
very time consuming.
In[4]:= Timing[DateList /@ data[[All, 1]]; ][[1]]
Out[4]= 32.11
Now, if we massage first the data and then use *DateListPlot*, the speed
improvement is dramatic (though still not as fast as *ListPlot*).
In[5]:= Timing[data2 = Transpose[{Apply[Join, Transpose[
{Table[{2007, 1, 1}, {Length[data]}],
(ToExpression[StringSplit[#1, ":"]] & ) /@
data[[All, 1]]}],
{1}], data[[All, 2]]}]; ][[1]]
Timing[DateListPlot[data2]][[1]]
%% + %
Timing[ListPlot[data2[[All, 2]], Axes -> None, Frame -> True,
GridLines -> {Automatic, None}]][[1]]
Out[5]= 0.265
Out[6]= 0.672
Out[7]= 0.937
Out[8]= 0.016
In[8]:= $Version
Out[8]= "6.0 for Microsoft Windows (32-bit) (June 19, 2007)"
--
Jean-Marc