Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Map conditional sums by date

  • To: mathgroup at smc.vnet.net
  • Subject: [mg99886] Re: Map conditional sums by date
  • From: "Charles L. Snyder" <clsnyder at gmail.com>
  • Date: Mon, 18 May 2009 02:32:16 -0400 (EDT)
  • References: <200905160920.FAA26816@smc.vnet.net> <gunegb$g1i$1@smc.vnet.net>

On May 16, 5:25 pm, Leonid Shifrin <lsh... at gmail.com> wrote:
> Hi Charles,
>
> the following will do what you want and more, since the first setting of
> each slider is "All", which allows you to total over the full range of it=
ems
> this slider is responsible for (day, month or year), and thus you can dec=
ide
> if you want AND or OR logic for each item, and therefore be as specific o=
r
> as general as you wish.
>
> Clear[getUI];
> getUI[data_] :=
>   Module[{months, monthSelect, yearSelect, daySelect, totalize, years,
>      days},
>    months = {All, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
>      "Aug", "Sep", "Oct", "Nov", "Dec"};
>    years = Prepend[Union@data[[All, 1, 1]], All];
>    With[{part  = #2}, #1[arg_] :=
>        Select[#, #[[1, part]] == arg &] &] & @@@
>     Transpose[{{yearSelect, monthSelect, daySelect}, {1, 2, 3}}];
>    daySelect[0] = yearSelect[All] = monthSelect[0] = # &;
>    totalize = Total[#[[All, 3]]] &;
>    days = Prepend[Range[31], All];
>    Manipulate[
>     Grid[{{"Year", "Month", "Day", "Amount"}, {years[[j]],
>        months[[i]], days[[k]],
>        totalize@
>         yearSelect[years[[j]]]@
>          monthSelect[i - 1]@daySelect[k - 1]@data}},
>      Frame -> All], {{i, 1, "Month"}, 1, 13, 1}, {{j, 1, "Year"}, 1=
,
>      Length[years], 1}, {{k, 1, "Day"}, 1, Length[days], 1},
>     Alignment -> Center]];
>
> Usage:
>
> getUI[mydata],
>
> with <mydata> from your e-mail. Note that I made explicit use of your
> specific format and therefore you have to maintain it for this to work.
> The main idea of this implementation is that 3 selector functions
> monthSelect, yearSelect, daySelect select the corresponding records
> and pass the resulting structure to the next selector function in the cha=
in.
> If any of them receives the <All> parameter, it simply stays idle and pas=
ses
> the entire data to the next selector function.
>
> It shouldn't be hard to attach a barchart-generating code to this if need=
ed.
>
> Hope this helps.
>
> Regards,
> Leonid
>
> On Sat, May 16, 2009 at 2:20 AM, Charles L. Snyder <clsny... at gmail.com>wr=
ote:
>
> > Hi
>
> > I want to (ultimately) use Manipulate to provide date selections
> > (year, months, days) to create a BarChart. I am able to get the
> > results from my data in a kludgy way. The data is in the form {{yr,
> > mo, day, h,min,sec}, code, amount}, as seen below:
>
> > mydata={{2009, 2, 5, 0, 0, 0}, 54161, 3.27`}, {{2006, 8, 23, 0, 0,
> >  0}, 54163, 3}, {{2007, 12, 5, 0, 0, 0}, 43280, 17.25`}, {{2009, 2,
> > 5,
> >   0, 0, 0}, 54161, 3.27`}}
>
> > I want to conditionally total the amounts (3rd column), by yr OR by
> > month OR by day; which I can do with :
>
> > Select[mydata, #[[1, 2]] == 7 &]
> > (* would give me all the rows in which July (7th mo) is the month, for
> > example*)
> > OR
> > Select[mydata, #[[1, 1]] == 2008 &]
> > (* would give me all the rows in which 2008 is the year *)
>
> > I can sum the amounts with:
> > Total[#[[3]] & /@ %]
>
> > I need basic help with putting these into a function, but ultimately I
> > want to be able to select yr or mo or day of week via Manipulate and
> > get the total....
>
> > My failed attempts:
>
> > (* parameters are yrmoday -> 1 is year, 2 is mo, 3 is day, and x is
> > the specific year or month or day*)
>
> > sumbydate[x_, yrmoday_] :=
> >  If[#[[1, yrmoday]] == x, myresult += #[[3]], myresult += 0] =
& /@
> >  mydata; myresult
>
> > OR
>
> > (* this would be sum by month, if it worked...)
>
> > sumbydate[x_, yrmoday_] := If[#[[1, yrmoday]] == x, res += #[[3=
]], res
> > += 0] & /@ temp; Map[
> >  sumrvubydate2[#] &, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}]
>
> > Thanks!

Both of these solutions work perfectly.
Thanks again.

cls


  • Prev by Date: Re: Future for Mathematica on Solaris
  • Next by Date: Re: Re: Wolfram|Alpha Lookup Tool for Mathematica
  • Previous by thread: Re: Map conditional sums by date
  • Next by thread: Re: Map conditional sums by date