Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
jupyter-naas
GitHub Repository: jupyter-naas/awesome-notebooks
Path: blob/master/GitHub/GitHub_Get_weekly_commits_from_repository.ipynb
2973 views
Kernel: Python 3

GitHub.png

GitHub - Get weekly commits from repository

Give Feedback | Bug report

Tags: #github #repos #commits #stats #naas_drivers #plotly #linechart #operations #analytics #dataframe #html

Last update: 2023-04-12 (Created: 2022-03-18)

Description: This notebook provides a weekly summary of commits made to a GitHub repository.

Input

import pandas as pd import plotly.express as px from naas_drivers import github import naas

Setup Github

How to find your personal access token on Github?

# GitHub token GITHUB_TOKEN = "ENTER_YOUR_GITHUB_TOKEN_HERE" # EXAMPLE : "ghp_fUYP0Z5i29AG4ggX8owctGnHU**********" # Github repo on which we want to create issues. REPO_URL = "ENTER_YOUR_REPO_URL_HERE" # EXAMPLE : "https://github.com/jupyter-naas/awesome-notebooks/"

Model

Get commits from repository url

df_commits = github.connect(GITHUB_TOKEN).repos.get_commits(REPO_URL) df_commits

Get weekly commits

def get_weekly_commits(df): # Exclude Github commits df = df[(df.COMMITTER_EMAIL.str[-10:] != "github.com")] # Groupby and count df = ( df.groupby(pd.Grouper(freq="W", key="AUTHOR_DATE")) .agg({"ID": "count"}) .reset_index() ) df["WEEKS"] = df["AUTHOR_DATE"].dt.strftime("W%U-%Y") # Cleaning df = df.rename(columns={"ID": "NB_COMMITS"}) return df df_weekly = get_weekly_commits(df_commits) df_weekly

Plot a bar chart of weekly commit activity

def create_barchart(df, repository): # Get repository repository = repository.split("/")[-1] # Calc commits commits = df.NB_COMMITS.sum() # Create fig fig = px.bar( df, title=f"GitHub - {repository} : Weekly user commits <br><span style='font-size: 13px;'>Total commits: {commits}</span>", x="WEEKS", y="NB_COMMITS", labels={"WEEKS": "Weeks committed", "NB_COMMITS": "Nb. commits"}, ) fig.update_traces(marker_color="black") fig.update_layout( plot_bgcolor="#ffffff", width=1200, height=800, font=dict(family="Arial", size=14, color="black"), paper_bgcolor="white", margin_pad=10, ) fig.show() return fig fig = create_barchart(df_weekly, REPO_URL)

Output

Save and export html

output_path = f"{REPO_URL.split('/')[-1]}_weekly_commits.html" fig.write_html(output_path) naas.asset.add(output_path, params={"inline": True})