Skip to content

Instantly share code, notes, and snippets.

@pc
Created September 7, 2009 20:50
Show Gist options
  • Save pc/182558 to your computer and use it in GitHub Desktop.
Save pc/182558 to your computer and use it in GitHub Desktop.
EYCSVParse[data_]:=Cases[
{DateList[#[[1]]],#[[2]],ToExpression[#[[4]]]}&/@Drop[Drop[data,1],-3],
{_,_String,_Real}
]
EYScatterSalesByDay[data_]:=DateListPlot[
{#[[1,1]],Total[#[[3]]&/@#]} & /@
Gather[data,#[[1]]==#2[[1]]&]
]
EYApps[data_] := #[[2]] & /@ data // Intersection
EYDates[data_]:= #[[1]] & /@ data // Intersection
EYWeekNumber[d_List]:=Floor[AbsoluteTime[d]/(3600*24*7)]
EYWeeks[data_]:= EYWeekNumber /@ EYDates[data] // Intersection
EYCollate[gdata_,transform_] := {transform[#[[1,1]]],#[[1,2]],Total[#[[3]]&/@#]} & /@ gdata
EYSalesByDay[data_] := EYCollate[
Gather[data,#1[[1]]==#2[[1]]&&#1[[2]]==#2[[2]]&],
Identity]
EYSalesByWeek[data_] := EYCollate[
Gather[data, EYWeekNumber[#1[[1]]]==EYWeekNumber[#2[[1]]]&&#1[[2]]==#2[[2]]&],
EYWeekNumber]
EYSalesPlot[data_,gdata_,dates_]:= BarChart[
#[[3]]& /@ # & /@
Function[date,
Function[app,
(Select[gdata,date==#[[1]]&&app==#[[2]]&]
/. {}->{{date,app,0}}
/. {a_,b_,c_} -> {a,b,Hold[Tooltip[c,b<>" - " <> ToString[c]]]}
// ReleaseHold)[[1]]] /@ EYApps[data]] /@ dates,
ChartLayout->"Stacked",
ChartStyle->"Rainbow",
BarSpacing->{0,0},
ImageSize->900]
EYSalesByWeekPlot[data_]:=EYSalesPlot[data,EYSalesByWeek[data],EYWeeks[data]]
EYSalesLastMonthPlot[data_]:=EYSalesPlot[data,EYSalesByDay[data],EYDates[data][[Range[-30,-1]]]]
EYProcessCSV[file_,outdir_]:=Module[{data=EYCSVParse[Import[file,"CSV"]]},
Export[outdir<>"/lastmonth.png",EYSalesLastMonthPlot[data]];
Export[outdir<>"/week.png",EYSalesByWeekPlot[data]]
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment