feat: quietest hour of day/week
This commit is contained in:
@@ -48,6 +48,8 @@ class Frequency:
|
||||
|
||||
busiest_weekday = top_key(week)
|
||||
busiest_hour = top_key(day)
|
||||
quietest_weekday = top_key(week, reverse=True)
|
||||
quietest_hour = top_key(day, reverse=True)
|
||||
n_weekdays = delta.days // 7
|
||||
if (
|
||||
self.dates[0].weekday() <= busiest_weekday
|
||||
@@ -62,11 +64,15 @@ class Frequency:
|
||||
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(week[busiest_weekday]/n_weekdays, precision=3)} msg, {percent(week[busiest_weekday]/total_msg)})",
|
||||
f"- **quietest day of week**: {calendar.day_name[quietest_weekday]} (~{precise(week[quietest_weekday]/n_weekdays, precision=3)} msg, {percent(week[quietest_weekday]/total_msg)})"
|
||||
if week[quietest_weekday] > 0 else "",
|
||||
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(day[busiest_hour]/n_hours, precision=3)} msg, {percent(day[busiest_hour]/total_msg)})",
|
||||
f"- **quietest hour of day**: {quietest_hour:0>2}:00 (~{precise(day[quietest_hour]/n_hours, precision=3)} msg, {percent(day[quietest_hour]/total_msg)})"
|
||||
if day[quietest_hour] > 0 else "",
|
||||
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",
|
||||
|
||||
+2
-2
@@ -177,13 +177,13 @@ def no_duplicate(seq: list) -> list:
|
||||
|
||||
|
||||
def top_key(
|
||||
d: Dict[Union[str, int], int], key: Optional[Callable] = None
|
||||
d: Dict[Union[str, int], int], key: Optional[Callable] = None, reverse: bool = False
|
||||
) -> Union[str, int]:
|
||||
if len(d) == 0:
|
||||
return None
|
||||
if key is None:
|
||||
key = lambda k: d[k]
|
||||
return sorted(d, key=key)[-1]
|
||||
return sorted(d, key=key, reverse=reverse)[-1]
|
||||
|
||||
|
||||
def val_sum(d: Dict[Any, int]) -> int:
|
||||
|
||||
Reference in New Issue
Block a user