In [1]:
import sys;sys.path.append("..")
import pandas as pd
from pandas import DataFrame
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
%matplotlib inline
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:100% !important; }</style>"))



In [2]:
from devml import (mkdata, stats, state, fetch_repo, ts)

In [23]:
dest, token, org = state.get_project_metadata("../project/config.json")

In [24]:
fetch_repo.clone_org_repos(token, org, 
        dest, branch="master")


2017-10-15 12:26:26,881 - devml - INFO - Creating Checkout Root:  /tmp/checkout
2017-10-15 12:26:27,760 - devml - INFO - Found Repo # 1 REPO NAME: flask , URL: git@github.com:pallets/flask.git 
2017-10-15 12:26:27,761 - devml - INFO - Found Repo # 2 REPO NAME: pallets-sphinx-themes , URL: git@github.com:pallets/pallets-sphinx-themes.git 
2017-10-15 12:26:27,762 - devml - INFO - Found Repo # 3 REPO NAME: markupsafe , URL: git@github.com:pallets/markupsafe.git 
2017-10-15 12:26:27,762 - devml - INFO - Found Repo # 4 REPO NAME: jinja , URL: git@github.com:pallets/jinja.git 
2017-10-15 12:26:27,763 - devml - INFO - Found Repo # 5 REPO NAME: werkzeug , URL: git@github.com:pallets/werkzeug.git 
2017-10-15 12:26:27,764 - devml - INFO - Found Repo # 6 REPO NAME: itsdangerous , URL: git@github.com:pallets/itsdangerous.git 
2017-10-15 12:26:27,765 - devml - INFO - Found Repo # 7 REPO NAME: flask-website , URL: git@github.com:pallets/flask-website.git 
2017-10-15 12:26:27,766 - devml - INFO - Found Repo # 8 REPO NAME: click , URL: git@github.com:pallets/click.git 
2017-10-15 12:26:27,766 - devml - INFO - Found Repo # 9 REPO NAME: flask-snippets , URL: git@github.com:pallets/flask-snippets.git 
2017-10-15 12:26:27,767 - devml - INFO - Found Repo # 10 REPO NAME: flask-docs , URL: git@github.com:pallets/flask-docs.git 
2017-10-15 12:26:27,768 - devml - INFO - Found Repo # 11 REPO NAME: flask-ext-migrate , URL: git@github.com:pallets/flask-ext-migrate.git 
2017-10-15 12:26:27,769 - devml - INFO - Found Repo # 12 REPO NAME: pocoo-sphinx-themes , URL: git@github.com:pallets/pocoo-sphinx-themes.git 
2017-10-15 12:26:27,769 - devml - INFO - Found Repo # 13 REPO NAME: website , URL: git@github.com:pallets/website.git 
2017-10-15 12:26:27,770 - devml - INFO - Found Repo # 14 REPO NAME: meta , URL: git@github.com:pallets/meta.git 
2017-10-15 12:26:27,771 - devml - INFO - Found Repo # 15 REPO NAME: werkzeug-cache , URL: git@github.com:pallets/werkzeug-cache.git 
2017-10-15 12:26:27,773 - devml - INFO - Cloning Repo # 1 REPO NAME: flask , URL: git@github.com:pallets/flask.git 
2017-10-15 12:26:29,412 - devml - INFO - Cloning Repo # 2 REPO NAME: pallets-sphinx-themes , URL: git@github.com:pallets/pallets-sphinx-themes.git 
2017-10-15 12:26:30,068 - devml - INFO - Cloning Repo # 3 REPO NAME: markupsafe , URL: git@github.com:pallets/markupsafe.git 
2017-10-15 12:26:30,787 - devml - INFO - Cloning Repo # 4 REPO NAME: jinja , URL: git@github.com:pallets/jinja.git 
2017-10-15 12:26:32,405 - devml - INFO - Cloning Repo # 5 REPO NAME: werkzeug , URL: git@github.com:pallets/werkzeug.git 
2017-10-15 12:26:35,185 - devml - INFO - Cloning Repo # 6 REPO NAME: itsdangerous , URL: git@github.com:pallets/itsdangerous.git 
2017-10-15 12:26:35,899 - devml - INFO - Cloning Repo # 7 REPO NAME: flask-website , URL: git@github.com:pallets/flask-website.git 
2017-10-15 12:26:36,968 - devml - INFO - Cloning Repo # 8 REPO NAME: click , URL: git@github.com:pallets/click.git 
2017-10-15 12:26:38,088 - devml - INFO - Cloning Repo # 9 REPO NAME: flask-snippets , URL: git@github.com:pallets/flask-snippets.git 
2017-10-15 12:26:38,877 - devml - INFO - Cloning Repo # 10 REPO NAME: flask-docs , URL: git@github.com:pallets/flask-docs.git 
2017-10-15 12:26:39,823 - devml - INFO - Cloning Repo # 11 REPO NAME: flask-ext-migrate , URL: git@github.com:pallets/flask-ext-migrate.git 
2017-10-15 12:26:40,559 - devml - INFO - Cloning Repo # 12 REPO NAME: pocoo-sphinx-themes , URL: git@github.com:pallets/pocoo-sphinx-themes.git 
2017-10-15 12:26:41,235 - devml - INFO - Cloning Repo # 13 REPO NAME: website , URL: git@github.com:pallets/website.git 
2017-10-15 12:26:42,046 - devml - INFO - Cloning Repo # 14 REPO NAME: meta , URL: git@github.com:pallets/meta.git 
2017-10-15 12:26:42,704 - devml - INFO - Cloning Repo # 15 REPO NAME: werkzeug-cache , URL: git@github.com:pallets/werkzeug-cache.git 
2017-10-15 12:26:43,309 - devml - ERROR - NO MASTER BRANCH...SKIPPING
Traceback (most recent call last):
  File "../devml/fetch_repo.py", line 76, in clone_org_repos
    repo = clone_remote_repo(name, url, dest, branch=branch)
  File "../devml/fetch_repo.py", line 45, in clone_remote_repo
    repo = git.Repo.clone_from(url, path, branch=branch)
  File "/Users/noahgift/.devml/lib/python3.6/site-packages/git/repo/base.py", line 972, in clone_from
    return cls._clone(git, url, to_path, GitCmdObjectDB, progress, **kwargs)
  File "/Users/noahgift/.devml/lib/python3.6/site-packages/git/repo/base.py", line 927, in _clone
    finalize_process(proc, stderr=stderr)
  File "/Users/noahgift/.devml/lib/python3.6/site-packages/git/util.py", line 341, in finalize_process
    proc.wait(**kwargs)
  File "/Users/noahgift/.devml/lib/python3.6/site-packages/git/cmd.py", line 418, in wait
    raise GitCommandError(self.args, status, errstr)
git.exc.GitCommandError: Cmd('git') failed due to: exit code(128)
  cmdline: git clone --branch=master -v git@github.com:pallets/werkzeug-cache.git /tmp/checkout/werkzeug-cache
  stderr: 'Cloning into '/tmp/checkout/werkzeug-cache'...
fatal: Remote branch master not found in upstream origin
'
Out[24]:
[<git.Repo "/tmp/checkout/flask/.git">,
 <git.Repo "/tmp/checkout/pallets-sphinx-themes/.git">,
 <git.Repo "/tmp/checkout/markupsafe/.git">,
 <git.Repo "/tmp/checkout/jinja/.git">,
 <git.Repo "/tmp/checkout/werkzeug/.git">,
 <git.Repo "/tmp/checkout/itsdangerous/.git">,
 <git.Repo "/tmp/checkout/flask-website/.git">,
 <git.Repo "/tmp/checkout/click/.git">,
 <git.Repo "/tmp/checkout/flask-snippets/.git">,
 <git.Repo "/tmp/checkout/flask-docs/.git">,
 <git.Repo "/tmp/checkout/flask-ext-migrate/.git">,
 <git.Repo "/tmp/checkout/pocoo-sphinx-themes/.git">,
 <git.Repo "/tmp/checkout/website/.git">,
 <git.Repo "/tmp/checkout/meta/.git">]

In [25]:
!ls -l /tmp/checkout


total 0
drwxr-xr-x  21 noahgift  wheel  672 Oct 15 12:26 click
drwxr-xr-x  25 noahgift  wheel  800 Oct 15 12:26 flask
drwxr-xr-x  11 noahgift  wheel  352 Oct 15 12:26 flask-docs
drwxr-xr-x  12 noahgift  wheel  384 Oct 15 12:26 flask-ext-migrate
drwxr-xr-x   8 noahgift  wheel  256 Oct 15 12:26 flask-snippets
drwxr-xr-x  14 noahgift  wheel  448 Oct 15 12:26 flask-website
drwxr-xr-x  18 noahgift  wheel  576 Oct 15 12:26 itsdangerous
drwxr-xr-x  23 noahgift  wheel  736 Oct 15 12:26 jinja
drwxr-xr-x  18 noahgift  wheel  576 Oct 15 12:26 markupsafe
drwxr-xr-x   4 noahgift  wheel  128 Oct 15 12:26 meta
drwxr-xr-x  10 noahgift  wheel  320 Oct 15 12:26 pallets-sphinx-themes
drwxr-xr-x   9 noahgift  wheel  288 Oct 15 12:26 pocoo-sphinx-themes
drwxr-xr-x  15 noahgift  wheel  480 Oct 15 12:26 website
drwxr-xr-x  25 noahgift  wheel  800 Oct 15 12:26 werkzeug

In [26]:
df = mkdata.create_org_df(path="/tmp/checkout")


2017-10-15 12:26:49,235 - devml.mkdata - INFO - Found repo: /tmp/checkout/flask
2017-10-15 12:26:49,236 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/flask
2017-10-15 12:26:49,253 - devml.mkdata - INFO - Repo Name: b'flask'
2017-10-15 12:26:49,317 - devml.mkdata - INFO - Found 3094 Messages For Repo: b'flask'
2017-10-15 12:26:49,319 - devml.mkdata - INFO - Found repo: /tmp/checkout/markupsafe
2017-10-15 12:26:49,320 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/markupsafe
2017-10-15 12:26:49,336 - devml.mkdata - INFO - Repo Name: b'markupsafe'
2017-10-15 12:26:49,355 - devml.mkdata - INFO - Found 97 Messages For Repo: b'markupsafe'
2017-10-15 12:26:49,357 - devml.mkdata - INFO - Found repo: /tmp/checkout/jinja
2017-10-15 12:26:49,358 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/jinja
2017-10-15 12:26:49,376 - devml.mkdata - INFO - Repo Name: b'jinja'
2017-10-15 12:26:49,422 - devml.mkdata - INFO - Found 1758 Messages For Repo: b'jinja'
2017-10-15 12:26:49,424 - devml.mkdata - INFO - Found repo: /tmp/checkout/flask-ext-migrate
2017-10-15 12:26:49,425 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/flask-ext-migrate
2017-10-15 12:26:49,440 - devml.mkdata - INFO - Repo Name: b'flask-ext-migrate'
2017-10-15 12:26:49,459 - devml.mkdata - INFO - Found 57 Messages For Repo: b'flask-ext-migrate'
2017-10-15 12:26:49,461 - devml.mkdata - INFO - Found repo: /tmp/checkout/website
2017-10-15 12:26:49,462 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/website
2017-10-15 12:26:49,481 - devml.mkdata - INFO - Repo Name: b'website'
2017-10-15 12:26:49,501 - devml.mkdata - INFO - Found 80 Messages For Repo: b'website'
2017-10-15 12:26:49,503 - devml.mkdata - INFO - Found repo: /tmp/checkout/werkzeug
2017-10-15 12:26:49,504 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/werkzeug
2017-10-15 12:26:49,522 - devml.mkdata - INFO - Repo Name: b'werkzeug'
2017-10-15 12:26:49,653 - devml.mkdata - INFO - Found 3371 Messages For Repo: b'werkzeug'
2017-10-15 12:26:49,655 - devml.mkdata - INFO - Found repo: /tmp/checkout/meta
2017-10-15 12:26:49,656 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/meta
2017-10-15 12:26:49,676 - devml.mkdata - INFO - Repo Name: b'meta'
2017-10-15 12:26:49,697 - devml.mkdata - INFO - Found 1 Messages For Repo: b'meta'
2017-10-15 12:26:49,699 - devml.mkdata - INFO - Found repo: /tmp/checkout/click
2017-10-15 12:26:49,701 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/click
2017-10-15 12:26:49,719 - devml.mkdata - INFO - Repo Name: b'click'
2017-10-15 12:26:49,756 - devml.mkdata - INFO - Found 954 Messages For Repo: b'click'
2017-10-15 12:26:49,758 - devml.mkdata - INFO - Found repo: /tmp/checkout/pocoo-sphinx-themes
2017-10-15 12:26:49,759 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/pocoo-sphinx-themes
2017-10-15 12:26:49,776 - devml.mkdata - INFO - Repo Name: b'pocoo-sphinx-themes'
2017-10-15 12:26:49,794 - devml.mkdata - INFO - Found 5 Messages For Repo: b'pocoo-sphinx-themes'
2017-10-15 12:26:49,796 - devml.mkdata - INFO - Found repo: /tmp/checkout/flask-website
2017-10-15 12:26:49,797 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/flask-website
2017-10-15 12:26:49,814 - devml.mkdata - INFO - Repo Name: b'flask-website'
2017-10-15 12:26:49,843 - devml.mkdata - INFO - Found 497 Messages For Repo: b'flask-website'
2017-10-15 12:26:49,845 - devml.mkdata - INFO - Found repo: /tmp/checkout/flask-docs
2017-10-15 12:26:49,846 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/flask-docs
2017-10-15 12:26:49,862 - devml.mkdata - INFO - Repo Name: b'flask-docs'
2017-10-15 12:26:49,880 - devml.mkdata - INFO - Found 77 Messages For Repo: b'flask-docs'
2017-10-15 12:26:49,883 - devml.mkdata - INFO - Found repo: /tmp/checkout/pallets-sphinx-themes
2017-10-15 12:26:49,884 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/pallets-sphinx-themes
2017-10-15 12:26:49,902 - devml.mkdata - INFO - Repo Name: b'pallets-sphinx-themes'
2017-10-15 12:26:49,922 - devml.mkdata - INFO - Found 35 Messages For Repo: b'pallets-sphinx-themes'
2017-10-15 12:26:49,924 - devml.mkdata - INFO - Found repo: /tmp/checkout/flask-snippets
2017-10-15 12:26:49,925 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/flask-snippets
2017-10-15 12:26:49,942 - devml.mkdata - INFO - Repo Name: b'flask-snippets'
2017-10-15 12:26:49,960 - devml.mkdata - INFO - Found 9 Messages For Repo: b'flask-snippets'
2017-10-15 12:26:49,962 - devml.mkdata - INFO - Found repo: /tmp/checkout/itsdangerous
2017-10-15 12:26:49,963 - devml.mkdata - INFO - Processing Repo: /tmp/checkout/itsdangerous
2017-10-15 12:26:49,980 - devml.mkdata - INFO - Repo Name: b'itsdangerous'
2017-10-15 12:26:50,002 - devml.mkdata - INFO - Found 141 Messages For Repo: b'itsdangerous'
2017-10-15 12:26:50,003 - devml.mkdata - INFO - Found a total log entries: 10176
2017-10-15 12:26:50,079 - devml.mkdata - INFO - Changing back to original cwd: /Users/noahgift/src/devml/notebooks from /private/tmp/checkout/itsdangerous

In [27]:
df.head()


Out[27]:
author_email author_name id message repo commits
date
2017-10-13 04:53:50 rgerganov@gmail.com Radoslav Gerganov 9291ead32e2fc8b13cef825186c968944e9ff344 Fix typo in logging.rst (#2492) b'flask' 1
2017-10-11 07:03:32 davidism@gmail.com David Lord 82e66848e8ab44d58e483b6b92eea5f04627c422 Merge pull request #2491 from mrnom/patch-1 b'flask' 1
2017-10-11 06:47:26 31620258+mrnom@users.noreply.github.com Mrn Om c3527144780772a22effd718654ca6ad472aaae0 Fix grammar/typos b'flask' 1
2017-10-10 11:59:28 davidism@gmail.com David Lord 0932d8f428ae6c7cb6615a6a146e417eb182ec4d Merge pull request #2490 from davidism/cli-review b'flask' 1
2017-10-10 11:10:20 davidism@gmail.com David Lord 9bc329c0c9dcdb5a3a6919f31542b6e7453d8aa8 rewrite cli docs reflects the current FLASK_AP... b'flask' 1

In [28]:
df_author_ud = stats.author_unique_active_days(df)

In [29]:
df_author_ud.head(10)


Out[29]:
author_name active_days active_duration active_ratio
86 Armin Ronacher 989 3817 days 0.26
501 Markus Unterwaditzer 342 1820 days 0.19
216 David Lord 129 712 days 0.18
664 Ron DuPlain 78 854 days 0.09
444 Kenneth Reitz 68 2566 days 0.03
197 Daniel Neuhäuser 42 1457 days 0.03
297 Georg Brandl 41 1337 days 0.03
196 Daniel Neuhäuser 36 435 days 0.08
450 Keyan Pishdadian 28 885 days 0.03
169 Christopher Grebs 28 1515 days 0.02

In [9]:
sns.barplot(y="author_name", x="active_days", data=df_author_ud.head(10))


Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0x116dbc5f8>

In [ ]: