diff --git a/src/data_types/frequency.py b/src/data_types/frequency.py index aab30cf..af0165b 100644 --- a/src/data_types/frequency.py +++ b/src/data_types/frequency.py @@ -19,8 +19,7 @@ class Frequency: self.dates = [] self.longest_break = timedelta(seconds=0) self.longest_break_start = None - self.week = {i: 0 for i in range(7)} - self.day = {i: 0 for i in range(24)} + self.hours = {i: {j: 0 for j in range(24)} for i in range(7)} self.busiest_day = None self.busiest_day_count = 0 self.busiest_hour = None @@ -43,8 +42,12 @@ class Frequency: if delta.days == 0: delta = timedelta(days=1) total_msg = len(self.dates) - busiest_weekday = top_key(self.week) - busiest_hour = top_key(self.day) + + week = {i: sum(self.hours[i].values()) for i in range(7)} + day = {j: sum(self.hours[i][j] for i in range(7)) for j in range(24)} + + busiest_weekday = top_key(week) + busiest_hour = top_key(day) n_weekdays = delta.days // 7 if ( self.dates[0].weekday() <= busiest_weekday @@ -58,12 +61,12 @@ class Frequency: f"- **earliest message**: {str_datetime(self.dates[0])} ({from_now(self.dates[0])})", f"- **latest message**: {str_datetime(self.dates[-1])} ({from_now(self.dates[-1])})", f"- **messages/day**: {precise(total_msg/delta.days, precision=3)}", - f"- **busiest day of week**: {calendar.day_name[busiest_weekday]} (~{precise(self.week[busiest_weekday]/n_weekdays, precision=3)} msg, {percent(self.week[busiest_weekday]/total_msg)})", + f"- **busiest day of week**: {calendar.day_name[busiest_weekday]} (~{precise(week[busiest_weekday]/n_weekdays, precision=3)} msg, {percent(week[busiest_weekday]/total_msg)})", f"- **busiest day ever**: {str_date(self.busiest_day)} ({from_now(self.busiest_day)}, {self.busiest_day_count} msg)" if self.busiest_day is not None else "", f"- **messages/hour**: {precise(total_msg*3600/delta.total_seconds(), precision=3)}", - f"- **busiest hour of day**: {busiest_hour:0>2}:00 (~{precise(self.day[busiest_hour]/n_hours, precision=3)} msg, {percent(self.day[busiest_hour]/total_msg)})", + f"- **busiest hour of day**: {busiest_hour:0>2}:00 (~{precise(day[busiest_hour]/n_hours, precision=3)} msg, {percent(day[busiest_hour]/total_msg)})", f"- **busiest hour ever**: {str_datetime(self.busiest_hour)} ({from_now(self.busiest_hour)}, {self.busiest_hour_count} msg)", f"- **longest break**: {plural(round(self.longest_break.total_seconds()/3600), 'hour')} ({plural(self.longest_break.days,'day')}) from {str_datetime(self.longest_break_start)} ({from_now(self.longest_break_start)})", f"- **avg. streak**: {precise(sum(self.streaks)/len(self.streaks), precision=3)} msg", diff --git a/src/scanners/frequency_scanner.py b/src/scanners/frequency_scanner.py index 67dc321..1775032 100644 --- a/src/scanners/frequency_scanner.py +++ b/src/scanners/frequency_scanner.py @@ -91,8 +91,7 @@ class FrequencyScanner(Scanner): freq.longest_break_start = latest latest = date # calculate busiest weekday / hours - freq.week[date.weekday()] += 1 - freq.day[date.hour] += 1 + freq.hours[date.weekday()][date.hour] += 1 # calculate busiest day ever start_delta = date - freq.dates[0] if start_delta.days > current_day: