Analyze programming patterns.
(sessions, daily_data)
| 205 | |
| 206 | |
| 207 | def analyze_patterns(sessions, daily_data): |
| 208 | """Analyze programming patterns.""" |
| 209 | print("PROGRAMMING PATTERNS ANALYSIS") |
| 210 | print("=" * 40) |
| 211 | |
| 212 | # Hour of day analysis |
| 213 | hour_counts = defaultdict(int) |
| 214 | hour_duration = defaultdict(float) |
| 215 | |
| 216 | for session in sessions: |
| 217 | for commit in session["commits"]: |
| 218 | hour = commit["datetime"].hour |
| 219 | hour_counts[hour] += 1 |
| 220 | # Distribute session time across commits |
| 221 | hour_duration[hour] += session["duration_minutes"] / len(session["commits"]) |
| 222 | |
| 223 | print("MOST ACTIVE HOURS (by commits):") |
| 224 | top_hours = sorted(hour_counts.items(), key=lambda x: x[1], reverse=True)[:5] |
| 225 | for hour, count in top_hours: |
| 226 | avg_duration = hour_duration[hour] / count if count > 0 else 0 |
| 227 | print(f" {hour:2d}:00 - {count:3d} commits ({avg_duration:.1f} min avg)") |
| 228 | print() |
| 229 | |
| 230 | # Day of week analysis |
| 231 | weekday_data = defaultdict(lambda: {"duration": 0, "commits": 0, "days": 0}) |
| 232 | weekday_names = [ |
| 233 | "Monday", |
| 234 | "Tuesday", |
| 235 | "Wednesday", |
| 236 | "Thursday", |
| 237 | "Friday", |
| 238 | "Saturday", |
| 239 | "Sunday", |
| 240 | ] |
| 241 | |
| 242 | for date, data in daily_data.items(): |
| 243 | weekday = date.weekday() |
| 244 | weekday_data[weekday]["duration"] += data["duration_minutes"] |
| 245 | weekday_data[weekday]["commits"] += data["commits"] |
| 246 | weekday_data[weekday]["days"] += 1 |
| 247 | |
| 248 | print("PROGRAMMING BY DAY OF WEEK:") |
| 249 | for i in range(7): |
| 250 | data = weekday_data[i] |
| 251 | if data["days"] > 0: |
| 252 | avg_hours = data["duration"] / 60 / data["days"] |
| 253 | avg_commits = data["commits"] / data["days"] |
| 254 | print( |
| 255 | f" {weekday_names[i]:<9}: {avg_hours:5.1f}h avg ({avg_commits:4.1f} commits avg, {data['days']} days)" |
| 256 | ) |
| 257 | |
| 258 | |
| 259 | def main(): |