Summarizing data by week

M

Mike Orr

What's the best way to summarize data by week? I have a set of
timestamped records, and I want a report with one row for each week in
the time period, including zero rows if there are weeks with no
activity. I was planning to use ISO weeks because datetime has a
convenient .isocalendar() method, but I want each output row to have a
label like this:

2006 week 5 (Feb)

However, to get the month (of the Thursday of that week) I have to
convert it back to an actual date,and I don't see a method to do that
in datetime or dateutil or mx.DateTime.

I was planning to use a dateutil.rrule to generate the weeks from the
minimum to maximum date, including any weeks that have no activity (so
they won't be in the dictionary). But rrule sequences are based on an
actual start date, not an ISO week, so that won't work. Unless perhaps
I take the minimum date and calculate the Thursday of that week, and
start from there. Then all my conversions would be to iso_week rather
than from iso_week.

Is there a better way to do this?

--Mike
 
L

Larry Bates

Mike said:
What's the best way to summarize data by week? I have a set of
timestamped records, and I want a report with one row for each week in
the time period, including zero rows if there are weeks with no
activity. I was planning to use ISO weeks because datetime has a
convenient .isocalendar() method, but I want each output row to have a
label like this:

2006 week 5 (Feb)

However, to get the month (of the Thursday of that week) I have to
convert it back to an actual date,and I don't see a method to do that
in datetime or dateutil or mx.DateTime.

I was planning to use a dateutil.rrule to generate the weeks from the
minimum to maximum date, including any weeks that have no activity (so
they won't be in the dictionary). But rrule sequences are based on an
actual start date, not an ISO week, so that won't work. Unless perhaps
I take the minimum date and calculate the Thursday of that week, and
start from there. Then all my conversions would be to iso_week rather
than from iso_week.

Is there a better way to do this?

--Mike

Generally I always check the day of week (DOW) of the beginning
and ending dates in the sequence and adjust them so that they
align with "real" weeks. Then it is usually as easy as adding
7 days inside the loop to increment each row. I'm not 100% sure
I understand the problem but perhaps this will help.

-Larry
 
D

Dan Bishop

What's the best way to summarize data by week? I have a set of
timestamped records, and I want a report with one row for each week in
the time period, including zero rows if there are weeks with no
activity. I was planning to use ISO weeks because datetime has a
convenient .isocalendar() method, but I want each output row to have a
label like this:

2006 week 5 (Feb)

However, to get the month (of the Thursday of that week) I have to
convert it back to an actual date,and I don't see a method to do that
in datetime or dateutil or mx.DateTime.

I was planning to use a dateutil.rrule to generate the weeks from the
minimum to maximum date, including any weeks that have no activity (so
they won't be in the dictionary). But rrule sequences are based on an
actual start date, not an ISO week, so that won't work. Unless perhaps
I take the minimum date and calculate the Thursday of that week, and
start from there. Then all my conversions would be to iso_week rather
than from iso_week.

That would work. The first Thursday of the year can be computed as:

def first_thursday(year):
jan1 = datetime.date(year, 1, 1)
return jan1 + datetime.timedelta((3 - jan1.weekday()) % 7)
 
M

M.-A. Lemburg

What's the best way to summarize data by week? I have a set of
timestamped records, and I want a report with one row for each week in
the time period, including zero rows if there are weeks with no
activity. I was planning to use ISO weeks because datetime has a
convenient .isocalendar() method, but I want each output row to have a
label like this:

2006 week 5 (Feb)

However, to get the month (of the Thursday of that week) I have to
convert it back to an actual date,and I don't see a method to do that
in datetime or dateutil or mx.DateTime.

You probably want to use mx.DateTime.ISO.WeekTime():

def WeekTime(year,isoweek=1,isoday=1,hour=0,minute=0,second=0.0):

"""Week(year,isoweek=1,isoday=1,hour=0,minute=0,second=0.0)

Returns a DateTime instance pointing to the given ISO week and
day. isoday defaults to 1, which corresponds to Monday in the
ISO numbering. The time part is set as given.

"""

The ISO submodule has more APIs related to ISO weeks and the
ISO date format in general:

http://www.egenix.com/files/python/mxDateTime.html#ISO

--
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source (#1, Jan 12 2007)________________________________________________________________________

::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,189
Latest member
CryptoTaxSoftware

Latest Threads

Top