Create visualizations of programming time.
(sessions, daily_data)
| 108 | |
| 109 | |
| 110 | def create_visualizations(sessions, daily_data): |
| 111 | """Create visualizations of programming time.""" |
| 112 | |
| 113 | # Create figure with subplots |
| 114 | fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(16, 12)) |
| 115 | fig.suptitle( |
| 116 | "Programming Time Analysis for BPlusTree Repository", |
| 117 | fontsize=16, |
| 118 | fontweight="bold", |
| 119 | ) |
| 120 | |
| 121 | # 1. Daily programming time |
| 122 | dates = sorted(daily_data.keys()) |
| 123 | daily_hours = [daily_data[date]["duration_minutes"] / 60 for date in dates] |
| 124 | |
| 125 | ax1.bar(dates, daily_hours, alpha=0.7, color="steelblue") |
| 126 | ax1.set_title("Daily Programming Time (Hours)") |
| 127 | ax1.set_ylabel("Hours") |
| 128 | ax1.tick_params(axis="x", rotation=45) |
| 129 | ax1.grid(True, alpha=0.3) |
| 130 | |
| 131 | # 2. Session timeline |
| 132 | session_starts = [s["start"] for s in sessions] |
| 133 | session_durations = [s["duration_minutes"] / 60 for s in sessions] |
| 134 | |
| 135 | ax2.scatter(session_starts, session_durations, alpha=0.6, color="orange", s=50) |
| 136 | ax2.set_title("Programming Sessions Timeline") |
| 137 | ax2.set_ylabel("Session Duration (Hours)") |
| 138 | ax2.tick_params(axis="x", rotation=45) |
| 139 | ax2.grid(True, alpha=0.3) |
| 140 | |
| 141 | # 3. Commits per day |
| 142 | daily_commits = [daily_data[date]["commits"] for date in dates] |
| 143 | |
| 144 | ax3.bar(dates, daily_commits, alpha=0.7, color="green") |
| 145 | ax3.set_title("Commits per Day") |
| 146 | ax3.set_ylabel("Number of Commits") |
| 147 | ax3.tick_params(axis="x", rotation=45) |
| 148 | ax3.grid(True, alpha=0.3) |
| 149 | |
| 150 | # 4. Session duration distribution |
| 151 | session_hours = [ |
| 152 | s["duration_minutes"] / 60 for s in sessions if s["duration_minutes"] > 0 |
| 153 | ] |
| 154 | |
| 155 | ax4.hist(session_hours, bins=20, alpha=0.7, color="purple", edgecolor="black") |
| 156 | ax4.set_title("Session Duration Distribution") |
| 157 | ax4.set_xlabel("Session Duration (Hours)") |
| 158 | ax4.set_ylabel("Frequency") |
| 159 | ax4.grid(True, alpha=0.3) |
| 160 | |
| 161 | plt.tight_layout() |
| 162 | plt.savefig("programming_time_analysis.png", dpi=300, bbox_inches="tight") |
| 163 | plt.show() |
| 164 | |
| 165 | |
| 166 | def print_summary(sessions, daily_data): |