Compute stats for Team members
%load_ext autoreload
%autoreload 2
import datetime
import logging
import os
# Initialize logger.
logging.basicConfig(level=logging.INFO)
_LOG = logging.getLogger(__name__)import github_utilsCompute stats for Team members¶
!sudo /bin/bash -c "(source /venv/bin/activate; pip install --quiet jupyterlab-vim PyGithub)"
!jupyter labextension enableAuthenticate GitHub Client¶
os.environ["GITHUB_ACCESS_TOKEN"] = ""access_token = os.getenv("GITHUB_ACCESS_TOKEN")
if not access_token:
_LOG.error("GITHUB_ACCESS_TOKEN not set. Exiting.")
raise ValueError("Set GITHUB_ACCESS_TOKEN environment variable")
client = github_utils.GitHubAPI(access_token=access_token).get_client()users = github_utils.get_github_contributors(
client, repo_names=["causify-ai/cmamp"]
)
_LOG.info("users: %s", users){'causify-ai/cmamp': ['gpsaggese', 'gitpaulsmith', 'rheenina', 'DanilYachmenev', 'jsmerix', 'PomazkinG', 'gad26032', 'tamriq', 'plyq', 'mongolianjesus', 'dremdem', 'sonaalKant', 'Sameep2808', 'Shayawnn', 'sonniki', 'samarth9008', 'heanhsok', 'Vedanshu7', 'mindfreakthemon', 'max-rsrch', 'pavolrabatin', 'amrawadk', 'Shaunak01', 'Jd8111997', 'tkpratardan', 'alinakhay', 'Tsallagov', 'neha2801-create', 'katerynak', 'aish-nidhi', 'jayati1397', 'elforeee', 'k0nsta', 'why2000', 'lizvladi', 'Vitaly-Protasov', 'OlgaVakhonina', 'tuimazy2008', 'enotdima', 'cma0416', 'zet694', 'daberezina', 'jserebr', 'pavel-particle', 'k911mipt', 'LibertasSpZ', 'RichardProchadzka', 'sumedha-24', 'andsilver', 'vvandriichuk']}
users_cmamp = [
"gpsaggese",
"gitpaulsmith",
"rheenina",
"DanilYachmenev",
"jsmerix",
"PomazkinG",
"tamriq",
"mongolianjesus",
"dremdem",
"Sameep2808",
"Shayawnn",
"sonniki",
"samarth9008",
"heanhsok",
"Vedanshu7",
"pavolrabatin",
"amrawadk",
"Shaunak01",
"Jd8111997",
"tkpratardan",
"cma0416",
]Define Time Period¶
# Use a long window for caching and a narrow slice for final analysis.
period_full = github_utils.utc_period("2025-01-01", "2025-06-23")
# period_slice = github_utils.utc_period("2025-04-01", "2025-05-31")Pre-fetch all the data you need in cache¶
repos = [
"helpers",
"tutorials",
"cmamp",
"kaizenflow",
"orange",
"sports_analytics",
]
org = "causify-ai"github_utils.prefetch_periodic_user_repo_data(
client, org, repos, users_cmamp, period_full
)Prefetching user-repo data: 28%|███████████████████████████████████████████████████ | 35/126 [00:00<00:00, 333.26it/s]helpers/gpsaggese: 53 commits, 47 PRs, 53 LOC entries, 12 issues assigned, 3 closed
helpers/gitpaulsmith: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
helpers/rheenina: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/DanilYachmenev: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
helpers/jsmerix: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/PomazkinG: 0 commits, 3 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/tamriq: 0 commits, 1 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/mongolianjesus: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
helpers/dremdem: 23 commits, 26 PRs, 23 LOC entries, 15 issues assigned, 14 closed
helpers/Sameep2808: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/Shayawnn: 0 commits, 0 PRs, 0 LOC entries, 2 issues assigned, 0 closed
helpers/sonniki: 52 commits, 53 PRs, 52 LOC entries, 44 issues assigned, 38 closed
helpers/samarth9008: 1 commits, 2 PRs, 1 LOC entries, 4 issues assigned, 3 closed
helpers/heanhsok: 83 commits, 89 PRs, 83 LOC entries, 43 issues assigned, 34 closed
helpers/Vedanshu7: 1 commits, 1 PRs, 1 LOC entries, 2 issues assigned, 2 closed
helpers/pavolrabatin: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/amrawadk: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/Shaunak01: 30 commits, 35 PRs, 30 LOC entries, 40 issues assigned, 34 closed
helpers/Jd8111997: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/tkpratardan: 7 commits, 8 PRs, 7 LOC entries, 2 issues assigned, 1 closed
helpers/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/gpsaggese: 8 commits, 7 PRs, 8 LOC entries, 4 issues assigned, 1 closed
tutorials/gitpaulsmith: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/rheenina: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/DanilYachmenev: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/jsmerix: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/PomazkinG: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/tamriq: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/mongolianjesus: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/dremdem: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/Sameep2808: 1 commits, 0 PRs, 1 LOC entries, 0 issues assigned, 0 closed
tutorials/Shayawnn: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/sonniki: 8 commits, 5 PRs, 8 LOC entries, 1 issues assigned, 1 closed
tutorials/samarth9008: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/heanhsok: 7 commits, 8 PRs, 7 LOC entries, 0 issues assigned, 0 closed
tutorials/Vedanshu7: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/pavolrabatin: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/amrawadk: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/Shaunak01: 5 commits, 6 PRs, 5 LOC entries, 9 issues assigned, 5 closed
tutorials/Jd8111997: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/tkpratardan: 15 commits, 19 PRs, 15 LOC entries, 12 issues assigned, 8 closed
tutorials/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/gpsaggese: 14 commits, 11 PRs, 14 LOC entries, 17 issues assigned, 5 closed
cmamp/gitpaulsmith: 3 commits, 4 PRs, 3 LOC entries, 4 issues assigned, 2 closed
cmamp/rheenina: 50 commits, 62 PRs, 50 LOC entries, 68 issues assigned, 58 closed
cmamp/DanilYachmenev: 9 commits, 13 PRs, 9 LOC entries, 16 issues assigned, 13 closed
cmamp/jsmerix: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/PomazkinG: 24 commits, 36 PRs, 24 LOC entries, 44 issues assigned, 32 closed
cmamp/tamriq: 37 commits, 44 PRs, 37 LOC entries, 41 issues assigned, 34 closed
cmamp/mongolianjesus: 54 commits, 70 PRs, 54 LOC entries, 59 issues assigned, 51 closed
cmamp/dremdem: 9 commits, 24 PRs, 9 LOC entries, 22 issues assigned, 16 closed
cmamp/Sameep2808: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/Shayawnn: 43 commits, 44 PRs, 43 LOC entries, 57 issues assigned, 31 closed
cmamp/sonniki: 37 commits, 37 PRs, 37 LOC entries, 32 issues assigned, 27 closed
cmamp/samarth9008: 19 commits, 26 PRs, 19 LOC entries, 39 issues assigned, 31 closed
cmamp/heanhsok: 89 commits, 115 PRs, 89 LOC entries, 133 issues assigned, 94 closed
cmamp/Vedanshu7: 50 commits, 81 PRs, 50 LOC entries, 77 issues assigned, 68 closed
cmamp/pavolrabatin: 20 commits, 23 PRs, 20 LOC entries, 0 issues assigned, 0 closed
cmamp/amrawadk: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
Prefetching user-repo data: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 126/126 [00:00<00:00, 316.40it/s]
INFO:github_utils:Prefetched 126 user-repo combos in 0.40 seconds for period 2025-01-01 00:00:00+00:00 to 2025-06-23 00:00:00+00:00.
cmamp/Shaunak01: 33 commits, 39 PRs, 33 LOC entries, 54 issues assigned, 43 closed
cmamp/Jd8111997: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/tkpratardan: 11 commits, 13 PRs, 11 LOC entries, 16 issues assigned, 5 closed
cmamp/cma0416: 5 commits, 18 PRs, 5 LOC entries, 23 issues assigned, 8 closed
kaizenflow/gpsaggese: 0 commits, 0 PRs, 0 LOC entries, 1 issues assigned, 0 closed
kaizenflow/gitpaulsmith: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
kaizenflow/rheenina: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/DanilYachmenev: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/jsmerix: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/PomazkinG: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/tamriq: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/mongolianjesus: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/dremdem: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/Sameep2808: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/Shayawnn: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/sonniki: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/samarth9008: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/heanhsok: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
kaizenflow/Vedanshu7: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/pavolrabatin: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/amrawadk: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/Shaunak01: 1 commits, 1 PRs, 1 LOC entries, 1 issues assigned, 1 closed
kaizenflow/Jd8111997: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/tkpratardan: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/gpsaggese: 5 commits, 0 PRs, 5 LOC entries, 0 issues assigned, 0 closed
orange/gitpaulsmith: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/rheenina: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
orange/DanilYachmenev: 16 commits, 2 PRs, 16 LOC entries, 0 issues assigned, 0 closed
orange/jsmerix: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/PomazkinG: 0 commits, 1 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/tamriq: 5 commits, 3 PRs, 5 LOC entries, 0 issues assigned, 0 closed
orange/mongolianjesus: 0 commits, 1 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/dremdem: 1 commits, 2 PRs, 1 LOC entries, 1 issues assigned, 0 closed
orange/Sameep2808: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/Shayawnn: 1 commits, 0 PRs, 1 LOC entries, 0 issues assigned, 0 closed
orange/sonniki: 2 commits, 1 PRs, 2 LOC entries, 0 issues assigned, 0 closed
orange/samarth9008: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/heanhsok: 29 commits, 18 PRs, 29 LOC entries, 2 issues assigned, 2 closed
orange/Vedanshu7: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/pavolrabatin: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/amrawadk: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/Shaunak01: 0 commits, 0 PRs, 0 LOC entries, 2 issues assigned, 2 closed
orange/Jd8111997: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/tkpratardan: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/gpsaggese: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/gitpaulsmith: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/rheenina: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/DanilYachmenev: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/jsmerix: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/PomazkinG: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/tamriq: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/mongolianjesus: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/dremdem: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/Sameep2808: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/Shayawnn: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/sonniki: 2 commits, 1 PRs, 2 LOC entries, 1 issues assigned, 1 closed
sports_analytics/samarth9008: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/heanhsok: 6 commits, 5 PRs, 6 LOC entries, 0 issues assigned, 0 closed
sports_analytics/Vedanshu7: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/pavolrabatin: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/amrawadk: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/Shaunak01: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/Jd8111997: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/tkpratardan: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
Collect Daily Metrics¶
combined_df = github_utils.collect_all_metrics(
client, org, repos, users_cmamp, period_full
)a. Compare users Total performance across all repos since last 3 months¶
github_utils.plot_multi_metrics_totals_by_user(
combined=combined_df,
metrics=["prs", "issues_closed"],
users=users_cmamp,
repos=repos,
start=datetime.datetime(2025, 3, 1),
end=datetime.datetime(2025, 6, 23),
)
Performance Evaluation¶
# Step 0: Define your slice.
users = users_cmamp
repos = repos
metrics = ["prs", "issues_closed"]
# Step 1: Summarize total metrics across users/repos.
summary_users = github_utils.summarize_users_across_repos(
combined_df, users=users, repos=repos
)
# Step 2: Add z-scores and percentiles.
z_df = github_utils.compute_z_scores(summary_users, metrics)
stats = github_utils.compute_percentile_ranks(z_df, metrics)
# Step 3: Visualize -- will automatically pick up all *_z or *_pctile columns.
github_utils.visualize_user_metric_comparison(stats, score_type="z")
github_utils.visualize_user_metric_comparison(stats, score_type="percentile")Loading...

Loading...
