Re: Converting date strings to DateList format - a need
- To: mathgroup at smc.vnet.net
- Subject: [mg106545] Re: [mg106507] Converting date strings to DateList format - a need
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Fri, 15 Jan 2010 07:08:20 -0500 (EST)
- Reply-to: hanlonr at cox.net
dataFile = {{"DATES", "DATA1", "DATA2"}, {"12/31/84", 1, 1}, {"01/01/85", 1,
1.00239}, {"01/02/85", 0.999206, 1.00238}, {"01/03/85", 0.997425,
1.00238}, {"01/04/85", 0.997038, 1.00237}, {"01/07/85", 0.989256,
1.0071}, {"01/08/85", 1.00867, 1.00235}, {"01/09/85", 0.994708,
1.00235}, {"01/10/85", 1.00552, 1.00234}};
Lengthen the data for timing
dataFile2 = Join[{dataFile[[1]]}, Sequence @@ Table[Rest[dataFile], {75}]];
t1 = Timing[dates =
DateList[{#, {"Month", "Day",
"YearShort"}}] & /@
(DateString[#] & /@
Rest[dataFile2][[All, 1]]);][[1]]
2.69932
You have an unnecessary step; however, it doesn't slow it much.
t2 = Timing[dates2 =
DateList[{#, {"Month", "Day", "YearShort"}}] & /@
Rest[dataFile2[[All, 1]]];][[1]]
2.66548
Your date format is the default and it goes faster if you let it just use the default.
Quiet is used to stop the warnings about the dates being ambiguous.
t3 = Timing[dates3 =
Quiet[DateList[#] & /@
Rest[dataFile2[[All, 1]]]];][[1]]
1.45169
The results are the same
dates == dates2 == dates3
True
{t2, t3}/t1
{0.987466,0.537798}
Bob Hanlon
---- Garapata <warsaw95826 at mypacks.net> wrote:
=============
I have dates in the first column of large flat files (6000+ rows).
The flat files have a header row and may have as many as 20 columns of
data besides the dates. A sample of a flat file follows
dataFile = {{"DATES", "DATA1", "DATA2"}, {"12/31/84", 1, 1},
{"01/01/85", 1,
1.00239}, {"01/02/85", 0.999206, 1.00238}, {"01/03/85", 0.997425,
1.00238}, {"01/04/85", 0.997038, 1.00237}, {"01/07/85", 0.989256,
1.0071}, {"01/08/85", 1.00867, 1.00235}, {"01/09/85", 0.994708,
1.00235}, {"01/10/85", 1.00552, 1.00234}}
I want to make a list of just the dates from the first column and turn
them into an unambiguous DataList[] format for later processing.
This works:
dates = DateList[{#, {"Month", "Day","YearShort"}}] & /@ (DateString
[#] & /@Rest[dataFile][[All, 1]]);
but, with thousands of dates in a file to convert, it takes a long
time to run. The Map within a Map seems to slow things down a lot.
Unless I've missed something, (quite possible) neither DateList[] nor
DateString seem to operate directly on lists, so I haven't figured out
a better way to do this.
Can I do anything to make this run faster? Any solutions much
appreciated.