{"action":"created","comment":{"url":"https://api.github.com/repos/biocore/American-Gut/pulls/comments/25737070","id":25737070,"diff_hunk":"@@ -0,0 +1,1729 @@\n+from __future__ import division\n+from os import mkdir\n+from os.path import exists\n+\n+import numpy as np\n+import pandas as pd\n+import matplotlib as mpl\n+import matplotlib.pyplot as plt\n+import skbio\n+\n+from scipy.stats import kruskal\n+from skbio.stats.power import _check_strs\n+from statsmodels.sandbox.stats.multicomp import multipletests\n+\n+__author__ = \"Justine Debelius\"\n+__copyright__ = \"Copyright 2015, The American Gut Project\"\n+__credits__ = [\"Justine Debelius\"]\n+__license__ = \"BSD\"\n+__version__ = \"unversioned\"\n+__maintainer__ = \"Justine Debelius\"\n+__email__ = \"Justine.Debelius@colorado.edu\"\n+\n+\n+def check_dir(dir_):\n+    \"\"\"Creates the specified directory if it does not exist\n+\n+    Parameters\n+    ----------\n+    dir : str\n+        the directory to be checked\n+    \"\"\"\n+\n+    if not exists(dir_):\n+        mkdir(dir_)\n+\n+\n+def pad_index(df, index_col='#SampleID', nzeros=9):\n+    \"\"\"Adds zeros to the sample ID strings\n+\n+    Parameters\n+    ----------\n+    df : dataframe\n+        the data frame without an index column\n+    index_col : {#SampleID, str}\n+        the name of the column containing the index data\n+    n_zeros : {9, int}\n+        the number of zeros to add before the string\n+\n+    Returns\n+    -------\n+    df : dataframe\n+        the dataframe with an appropriate index column\n+    \"\"\"\n+\n+    # Gets the sample IDs\n+    samples = df[index_col].values\n+    new_samples = []\n+\n+    # Pads the zeros on the id\n+    for samp in samples:\n+        if not isinstance(samp, str):\n+            samp = str(samp)\n+        splits = samp.split('.')\n+        first_clean = [splits[0].zfill(nzeros)]\n+        first_clean.extend(splits[1:])\n+        new_samples.append('.'.join(first_clean))\n+\n+    # Sets the column as the index\n+    df.index = new_samples\n+    del df[index_col]\n+\n+    # Returns the dataframe\n+    return df\n+\n+\n+def boxplot(vecs, ax=None, notch=True, interval=0.5, boxplot_props={},\n+    show_counts=True, **kwargs):\n+    \"\"\"Makes a more attractive boxplot\n+\n+    Parameters\n+    ----------\n+    vecs : list\n+        The list of arrays to plot as boxplots. The list format allows the\n+        arrays to be of uneven length.\n+    ax : matplotlib axis, optional\n+        The axis where data should be plotted. If none, a new axis instance\n+        will be created.\n+    interval : float, optional\n+        The spacing between the boxplot instances on the axes\n+    notch : bool, optional\n+        Displays the parametric 95% confidence interval around the mean.\n+    show_counts : bool, optional\n+        Shows the size of the groups below each plot on the x-axis\n+    p_value : float, optional\n+        Default is None. When supplied, the signfigance value will be displayed\n+        on the plot in the upper right hand corner by default.\n+    show_xgrid: bool, optional\n+        Default is False. Adds vertical lines at each major x-tick.\n+    show_ygrid: bool, optional\n+        Default is True. Adds horizonal lines at each major y-tick.\n+    title: str, optional\n+        The title to be placed on the graph.\n+    ylims : list\n+        The limits for the y-axis.\n+    ylabel : str\n+        The label text for the y-axis. Every time you leave off appropriate\n+        labels and units, a science grad student grading lab reports cries\n+        another bitter tear into their bottle of craft beer.\n+\n+    Returns\n+    -------\n+    ax : axes\n+        A matplotlib axes containing the plotted data\n+\n+    Other Parameters\n+    ----------------\n+    hide_x_ticks : bool, optional\n+        Display x-tick symbols on the plot\n+    hide_y_ticks : bool, optional\n+        Display y-tick symbols on the plot\n+    p_x : float\n+        The x position of the critical value text\n+    p_y : float\n+        The y position of the critical value text\n+    p_size : int\n+        The font size for the critical value text\n+    title_size: int\n+        The font size for the title\n+    xticklabels : list\n+        The strings to label each point on the x-axis.\n+    xfont_angle : float\n+        The angle in degrees for the x tick label text.\n+    xfont_align : {'left', 'right', 'center'}\n+        The horizonal alignment of the x tick label text. For rotated text,\n+        an alignment or 'right' is recommended.\n+    xlabel_size : int\n+        The font size of the x-axis label.\n+    xtick_size : int\n+        The font size for the xtick labels\n+    yticks : array_like\n+        The positions where ticks should appear on the y-axis.\n+    yticklabels : list\n+        The text to be displayed at each y tick.\n+    ylabel_size : int\n+        The font size of the y-axis label.\n+    ytick_size : int\n+        The font size for the ytick labels\n+    \"\"\"\n+\n+    # Sets up an axes instance if necessary\n+    if ax is None:\n+        ax = plt.axes()\n+\n+    # Determines the plotting locations\n+    num_cats = len(vecs)\n+    xlim = [-interval/2,\n+            interval*(num_cats-1)+interval/2]\n+\n+    # Sets up the plotting constants\n+    ticks = np.arange(0, interval*num_cats, interval)\n+    counts = []\n+\n+    # Loops through the data\n+    for idx, vec in enumerate(vecs):\n+        # Gets vector characteristics\n+        tick = [ticks[idx]]\n+        counts.append(len(vec))\n+        # Plots the data\n+        ax.boxplot(vec,\n+                   positions=tick,\n+                   notch=notch,\n+                   **boxplot_props)\n+\n+    # Sets up axis formatting\n+    if show_counts:\n+        kwargs['counts'] = counts\n+    if 'xlim' not in kwargs:\n+        kwargs['xlim'] = xlim\n+    if 'xticks' not in kwargs:\n+        kwargs['xticks'] = ticks\n+\n+    _format_axis(ax, **kwargs)\n+\n+    return ax\n+\n+\n+def pretty_pandas_boxplot(meta, group, cat, order=None, ax=None,\n+    **boxplot_props):\n+    \"\"\"Creates a more attractive poxplot than pandas\n+\n+    Parameters\n+    ----------\n+    meta : pandas dataframe\n+        The metadata for the variable containing a column with a continous\n+        varaible, designated in `cat`, and a categorical variable, `group`\n+        with categories given by `order`.\n+    group : str\n+        The name of a column in meta which is a categorical predictor variable\n+    cat : str\n+        A column in meta which contains a continous response variable\n+    order : list, optional\n+        The order of categories in `group`. This can be used to limit\n+        the categories plotted. For instance, if there are three categories in\n+        `group`: A, B and C, and you only wish to compare A and C, you can\n+        list order as ['A', 'C'] to limit the categories.\n+    interval : float, optional\n+        The spacing between the boxplot instances on the axes\n+    notch : bool, optional\n+        Displays the parametric 95% confidence interval around the mean.\n+    show_n : bool, optional\n+        Shows the size of the groups below each plot on the x-axis\n+    p_value : float, optional\n+        Default is None. When supplied, the signfigance value will be displayed\n+        on the plot in the upper right hand corner by default.\n+    show_xgrid: bool, optional\n+        Default is False. Adds vertical lines at each major x-tick.\n+    show_ygrid: bool, optional\n+        Default is True. Adds horizonal lines at each major y-tick.\n+    title: str, optional\n+        The title to be placed on the graph.\n+    ylims : list\n+        The limits for the y-axis.\n+    ylabel : str\n+        The label text for the y-axis. Every time you leave off appropriate\n+        labels and units, a science grad student grading lab reports cries\n+        another bitter tear into their bottle of craft beer.\n+\n+    Returns\n+    -------\n+    ax : axes\n+        A matplotlib axes containing the plotted data\n+\n+    \"\"\"\n+\n+    grouped = meta.groupby(group)\n+\n+    # Sets up the plotting order\n+    if order is None:\n+        order = grouped.groups.keys()\n+\n+    # Gets the data vectors\n+    vecs = [grouped.get_group(g)[cat].values for g in order]\n+\n+    # Formats the axis, if not already done\n+    if 'xticklabels' not in boxplot_props:\n+        boxplot_props['xticklabels'] = [g.split('(')[0] for g in order]\n+    if 'show_xticks' not in boxplot_props:\n+        boxplot_props['show_xticks'] = False\n+    if 'show_ygrid' not in boxplot_props:\n+        boxplot_props['show_ygrid'] = True\n+\n+    # Calculates the p value\n+    h, p = kruskal(*vecs)\n+\n+    # Sets the boxplot properties\n+    ax = boxplot(vecs=vecs, ax=ax, p_value=p, **boxplot_props)\n+\n+    return ax\n+\n+\n+def post_hoc_pandas(meta, group, cat, order=None, correct=None,\n+    show_stats=True):\n+    \"\"\"Preforms an post-hoc comparison between two groups\n+\n+    Parameters\n+    ----------\n+    meta : pandas DataFrame\n+        the metadata object for the data\n+    group : str\n+        the metadata category being interograted\n+    cat : str\n+        the name of the column with the result\n+    order : None, list, optional\n+        Default is None. The order of groups in the category.\n+    correct : None, str, optional\n+        Method for multiple hypothesis correction using\n+        `statsmodels.sandbox.stats.multicomp.multipletests`. Methods you're\n+        likely to use are `bonferroni` and `fdr_bh`.\n+    show_stats : bool, optional\n+        When `show_stats` is True, a summary of each group will be displayed\n+        along with the p values. \n+\n+    Returns\n+    -------\n+    post_hoc : dataframe\n+        `post_hoc` summarizes the results of the post-hoc test. It includes\n+        statitics about each distribution, as well as the comparison matrix\n+        of p-values.\n+\n+    \"\"\"\n+\n+    # Groups the data\n+    grouped = meta.groupby(group)\n+\n+    # Gets the order\n+    if order is None:\n+        order = grouped.groups.keys()\n+\n+    # Prealocates an output frame\n+    if show_stats:\n+        stats = pd.DataFrame({'Counts': grouped[cat].count(),\n+                              'Mean':  grouped[cat].mean(),\n+                              'Stdv': grouped[cat].std(),\n+                              'Median': grouped[cat].median()})\n+\n+    # Preforms ad-hoc comparisons\n+    comparison = {}\n+\n+    for pos, g1_name in enumerate(order[:-1]):\n+        g1_data = grouped.get_group(g1_name)[cat]\n+        compare = []\n+        index = []\n+        for id2, g2_name in enumerate(order):\n+            if id2 <= pos:\n+                index.append(g2_name)\n+                compare.append(np.nan)\n+            else:\n+                g2_data = grouped.get_group(g2_name)[cat]\n+                index.append(g2_name)\n+                compare.append(kruskal(g1_data, g2_data)[1])\n+        add_series = pd.Series(compare, index=index)\n+        comparison[g1_name] = add_series\n+\n+    # Converts the data to a dataframe\n+    compare = pd.DataFrame(comparison)\n+    if show_stats:\n+        post_hoc = stats.join(compare[order[:-1]])\n+    else:\n+        post_hoc = compare[order[:-1]]\n+    post_hoc = post_hoc.reindex(order)\n+\n+    # Performs the multiple hypothesis correction\n+    if correct is not None:\n+        post_hoc = multiple_correct_post_hoc(post_hoc, order, correct)\n+\n+    return post_hoc\n+\n+\n+def multiple_correct_post_hoc(raw_ph, order, alphafwer=0.05,\n+    method='bonferroni'):\n+    \"\"\"Performs multiple hypothesis correction on post hoc test matrices\"\"\"\n+    # Gets the positon matrix\n+    num_rows = len(order)\n+    num_cols = num_rows - 1\n+    pos = np.vstack([np.arange(0, num_cols) + i*num_cols for i in\n+                     range(num_rows)])\n+\n+    # Draws the results and reshapes\n+    raw_ps = raw_ph.loc[order, order[:-1]].values\n+    ps_all = raw_ps.reshape(pos.max() + 1)\n+    pos_all = pos.reshape(pos.max() + 1)\n+\n+    # Sorts the data\n+    ps_ord = np.argsort(ps_all)\n+    ps_sort = ps_all[ps_ord]\n+    pos_sort = pos_all[ps_ord]\n+    # Identifies the position of missing values in the sorted matrix\n+    ps_nan = np.isnan(ps_sort) == False\n+\n+    # Corrects for multiple hypotheses\n+    reject, p_corr, asidak, abonf = multipletests(ps_sort[ps_nan],\n+                                                  alpha=0.05,\n+                                                  method=method)\n+\n+    # Sorts the data back into its orginal order\n+    ps_sort[ps_nan] = p_corr\n+    pos_reord = np.argsort(pos_sort)\n+    ps_corr = ps_sort[pos_reord]\n+\n+    raw_ph.loc[order, order[:-1]] = ps_corr.reshape(raw_ps.shape)\n+\n+    return raw_ph\n+\n+\n+def barchart(height, interval=0.5, width=0.4, ax=None, errors=None,\n+    colormap=None, match_colors=True, elinewidth=2, ecapwidth=2, offset=0,\n+    **kwargs):\n+    \"\"\"Renders a barchart\n+\n+    Parameters\n+    ----------\n+    height : array_like\n+        The height of each of the bars\n+    interval : float, optional\n+        The spacing between the bars\n+    width : float, optional\n+        The width of each bars. Should be less than or equal to the interal.\n+    ax : matplotlib axis, optional\n+        The axis where data should be plotted. If none, a new axis instance\n+        will be created.\n+    errors : array_like, optional\n+        The error bars assoicated with the groups being plotted.\n+    colormap : array-like, optional\n+        An n x 3 or n x 4 array of colors. If none is supplied, the bar\n+        facecolors will be white.\n+    match_colors: bool, optional\n+        If the error bars and plot edges should be the same color as the bar\n+        (True) or black (False).\n+    elinewidth : int\n+        The weight in points of the errorbar on top of the plot.\n+    ecapwidth : int\n+        The weight in points of the line over the errorbar.\n+    offset : float\n+        The space on the axis for which the data should be offset. This allows\n+        plotting multiple barcharts on the same axis with spacing, or plotting\n+        the bar chart away from the origin.\n+    p_value : float, optional\n+        Default is None. When supplied, the signfigance value will be displayed\n+        on the plot in the upper right hand corner by default.\n+    show_xgrid: bool, optional\n+        Default is False. Adds vertical lines at each major x-tick.\n+    show_ygrid: bool, optional\n+        Default is True. Adds horizonal lines at each major y-tick.\n+    title: str, optional\n+        The title to be placed on the graph.\n+    ylims : list\n+        The limits for the y-axis.\n+    ylabel : str\n+        The label text for the y-axis. Every time you leave off appropriate\n+        labels and units, a science grad student grading lab reports cries\n+        another bitter tear into their bottle of craft beer.\n+\n+    Returns\n+    -------\n+    ax : axes\n+        A matplotlib axes containing the plotted data\n+    xpos : array\n+        the center position for each bar\n+\n+    Other Parameters\n+    ----------------\n+    elinewidth : int, optional\n+        The thickness of the errorbar in pixels\n+    e_capthickness : int, optional\n+        The tickness of the error bar cap in pixels\n+    hide_x_ticks : bool, optional\n+        Display x-tick symbols on the plot\n+    hide_y_ticks : bool, optional\n+        Display y-tick symbols on the plot\n+    p_x : float\n+        The x position of the critical value text\n+    p_y : float\n+        The y position of the critical value text\n+    p_size : int\n+        The font size for the critical value text\n+    title_size: int\n+        The font size for the title\n+    xticklabels : list\n+        The strings to label each point on the x-axis.\n+    xfont_angle : float\n+        The angle in degrees for the x tick label text.\n+    xfont_align : {'left', 'right', 'center'}\n+        The horizonal alignment of the x tick label text. For rotated text,\n+        an alignment or 'right' is recommended.\n+    xlabel_size : int\n+        The font size of the x-axis label.\n+    xtick_size : int\n+        The font size for the xtick labels\n+    yticks : array_like\n+        The positions where ticks should appear on the y-axis.\n+    yticklabels : list\n+        The text to be displayed at each y tick.\n+    ylabel_size : int\n+        The font size of the y-axis label.\n+    ytick_size : int\n+        The font size for the ytick labels\n+    \"\"\"\n+    # Sets up an axes instance if necessary\n+    if ax is None:\n+        ax = plt.axes()\n+\n+    # Sets the colormap and egdecolor, if necessary\n+    if colormap is None:\n+        colormap = np.array([[0.5, 0.5, 0.5]]*len(height))\n+    elif isinstance(colormap, str):\n+        colormap = segment_colormap(colormap, len(height))\n+\n+    if match_colors:\n+        edgecolors = colormap\n+    else:\n+        edgecolors = np.array([[0, 0, 0]]*len(height))\n+\n+    # Gets an axis instance\n+    if ax is None:\n+        ax = plt.axes()\n+\n+    # Gets the xposition, for errorbars\n+    xpos = np.arange(0, len(height))*interval + interval/2 + offset\n+\n+    xleft = np.arange(0, len(height)) * interval + (interval - width)/2 + offset\n+    xlims = [0, len(height)*interval]\n+\n+    if 'xlim' not in kwargs or kwargs['xlim'] is None:\n+        kwargs['xlim'] = xlims\n+\n+    # Plots the errorbars\n+    if errors is not None:\n+        e_bars = []\n+        for idx, err in enumerate(errors):\n+            eb = ax.errorbar(x=xpos[idx],\n+                             y=height[idx],\n+                             yerr=err,\n+                             fmt='none',\n+                             ecolor=edgecolors[idx, :],\n+                             elinewidth=elinewidth,\n+                             capthick=ecapwidth)\n+        e_bars.append(eb)\n+\n+    # Plots the bars\n+    bars = ax.bar(xleft, height, width=width)\n+    for idx, bar in enumerate(bars):\n+        bar.set_facecolor(colormap[idx, :])\n+        bar.set_edgecolor(edgecolors[idx, :])\n+\n+    _format_axis(ax)\n+\n+    return ax, xpos\n+\n+\n+def add_comparison_bars(centers, tops, p_values, ax, space=None,\n+    interval=None, lowest=None, factor=5, label_size=10,\n+    show_value=True):\n+    \"\"\"Adds p_value bars\n+\n+    The assumes that comparison bars are being introduced for a\n+    group of error bars, assuming a reference and comparison.\n+\n+    Parameters\n+    ----------\n+    centers : array-like\n+        The center of the barplot.\n+    tops : array_like\n+        The maximum height of the groups to be compared. There must be a\n+        top for each center supplied.\n+    p_values : array-like\n+        The critical values between the groups in the bars. There should be\n+        one less p value than there are bars.\n+    ax : matplotlib axis, optional\n+        The axis where data should be plotted. If none, a new axis instance\n+        will be created.\n+    space : float\n+        The y-distance between each the comparison line.\n+    interval : float\n+        The space between the bars\n+    lowest : float, optional\n+        If mutliple sets of comparison bars are being added, this allows\n+        the user to set the position of the lowest bar in the group\n+    factor : unsigned int, optional\n+        The ones-place value to which values will be rounded. For example,\n+        for a `factor` of 5, a value of 0.12 will be rounded to 0.15 and a\n+        value of 2.7 will be rounded to 3.0.\n+    label_size : unsigned int, optional\n+        The font size for displaying signifigance labels","path":"americangut/diversity_analysis.py","position":553,"original_position":553,"commit_id":"965b5cef766ed938a71681b7b865cc702845f2e6","original_commit_id":"965b5cef766ed938a71681b7b865cc702845f2e6","user":{"login":"wasade","id":474290,"avatar_url":"https://avatars.githubusercontent.com/u/474290?v=3","gravatar_id":"","url":"https://api.github.com/users/wasade","html_url":"https://github.com/wasade","followers_url":"https://api.github.com/users/wasade/followers","following_url":"https://api.github.com/users/wasade/following{/other_user}","gists_url":"https://api.github.com/users/wasade/gists{/gist_id}","starred_url":"https://api.github.com/users/wasade/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wasade/subscriptions","organizations_url":"https://api.github.com/users/wasade/orgs","repos_url":"https://api.github.com/users/wasade/repos","events_url":"https://api.github.com/users/wasade/events{/privacy}","received_events_url":"https://api.github.com/users/wasade/received_events","type":"User","site_admin":false},"body":"significance\r\n\r\n...gonna stop mentioning this one. suggest doing a search through the code for \"signi\" and check that way?","created_at":"2015-03-03T23:04:34Z","updated_at":"2015-03-03T23:04:34Z","html_url":"https://github.com/biocore/American-Gut/pull/127#discussion_r25737070","pull_request_url":"https://api.github.com/repos/biocore/American-Gut/pulls/127","_links":{"self":{"href":"https://api.github.com/repos/biocore/American-Gut/pulls/comments/25737070"},"html":{"href":"https://github.com/biocore/American-Gut/pull/127#discussion_r25737070"},"pull_request":{"href":"https://api.github.com/repos/biocore/American-Gut/pulls/127"}}},"pull_request":{"url":"https://api.github.com/repos/biocore/American-Gut/pulls/127","id":29584487,"html_url":"https://github.com/biocore/American-Gut/pull/127","diff_url":"https://github.com/biocore/American-Gut/pull/127.diff","patch_url":"https://github.com/biocore/American-Gut/pull/127.patch","issue_url":"https://api.github.com/repos/biocore/American-Gut/issues/127","number":127,"state":"open","locked":false,"title":"Statistical power","user":{"login":"JWDebelius","id":5534846,"avatar_url":"https://avatars.githubusercontent.com/u/5534846?v=3","gravatar_id":"","url":"https://api.github.com/users/JWDebelius","html_url":"https://github.com/JWDebelius","followers_url":"https://api.github.com/users/JWDebelius/followers","following_url":"https://api.github.com/users/JWDebelius/following{/other_user}","gists_url":"https://api.github.com/users/JWDebelius/gists{/gist_id}","starred_url":"https://api.github.com/users/JWDebelius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JWDebelius/subscriptions","organizations_url":"https://api.github.com/users/JWDebelius/orgs","repos_url":"https://api.github.com/users/JWDebelius/repos","events_url":"https://api.github.com/users/JWDebelius/events{/privacy}","received_events_url":"https://api.github.com/users/JWDebelius/received_events","type":"User","site_admin":false},"body":"This is a cleaned up power notebook, loosely related to what was presented in #121 \r\n\r\nThe rendered notebook can be found [here](http://nbviewer.ipython.org/github/JWDebelius/American-Gut/blob/statistical_power/ipynb/Power.ipynb).\r\n\r\nThe text is in [Google docs](https://docs.google.com/document/d/1DOEFP4SwqiJuLrMqgGitQwhss4ayREVQ4WWueltHiRM/edit?usp=sharing), which may be a better place for text editing.\r\n\r\nThis notebook relies on code generated in #125 and on the data files generated when #126 is run.","created_at":"2015-02-19T03:15:31Z","updated_at":"2015-03-03T23:04:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ee360261dd2fbc06dcc24ccf96e3ba9812ae1abb","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/biocore/American-Gut/pulls/127/commits","review_comments_url":"https://api.github.com/repos/biocore/American-Gut/pulls/127/comments","review_comment_url":"https://api.github.com/repos/biocore/American-Gut/pulls/comments{/number}","comments_url":"https://api.github.com/repos/biocore/American-Gut/issues/127/comments","statuses_url":"https://api.github.com/repos/biocore/American-Gut/statuses/965b5cef766ed938a71681b7b865cc702845f2e6","head":{"label":"JWDebelius:statistical_power","ref":"statistical_power","sha":"965b5cef766ed938a71681b7b865cc702845f2e6","user":{"login":"JWDebelius","id":5534846,"avatar_url":"https://avatars.githubusercontent.com/u/5534846?v=3","gravatar_id":"","url":"https://api.github.com/users/JWDebelius","html_url":"https://github.com/JWDebelius","followers_url":"https://api.github.com/users/JWDebelius/followers","following_url":"https://api.github.com/users/JWDebelius/following{/other_user}","gists_url":"https://api.github.com/users/JWDebelius/gists{/gist_id}","starred_url":"https://api.github.com/users/JWDebelius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JWDebelius/subscriptions","organizations_url":"https://api.github.com/users/JWDebelius/orgs","repos_url":"https://api.github.com/users/JWDebelius/repos","events_url":"https://api.github.com/users/JWDebelius/events{/privacy}","received_events_url":"https://api.github.com/users/JWDebelius/received_events","type":"User","site_admin":false},"repo":{"id":13822709,"name":"American-Gut","full_name":"JWDebelius/American-Gut","owner":{"login":"JWDebelius","id":5534846,"avatar_url":"https://avatars.githubusercontent.com/u/5534846?v=3","gravatar_id":"","url":"https://api.github.com/users/JWDebelius","html_url":"https://github.com/JWDebelius","followers_url":"https://api.github.com/users/JWDebelius/followers","following_url":"https://api.github.com/users/JWDebelius/following{/other_user}","gists_url":"https://api.github.com/users/JWDebelius/gists{/gist_id}","starred_url":"https://api.github.com/users/JWDebelius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JWDebelius/subscriptions","organizations_url":"https://api.github.com/users/JWDebelius/orgs","repos_url":"https://api.github.com/users/JWDebelius/repos","events_url":"https://api.github.com/users/JWDebelius/events{/privacy}","received_events_url":"https://api.github.com/users/JWDebelius/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/JWDebelius/American-Gut","description":"American Gut open-access data and IPython notebooks","fork":true,"url":"https://api.github.com/repos/JWDebelius/American-Gut","forks_url":"https://api.github.com/repos/JWDebelius/American-Gut/forks","keys_url":"https://api.github.com/repos/JWDebelius/American-Gut/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JWDebelius/American-Gut/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JWDebelius/American-Gut/teams","hooks_url":"https://api.github.com/repos/JWDebelius/American-Gut/hooks","issue_events_url":"https://api.github.com/repos/JWDebelius/American-Gut/issues/events{/number}","events_url":"https://api.github.com/repos/JWDebelius/American-Gut/events","assignees_url":"https://api.github.com/repos/JWDebelius/American-Gut/assignees{/user}","branches_url":"https://api.github.com/repos/JWDebelius/American-Gut/branches{/branch}","tags_url":"https://api.github.com/repos/JWDebelius/American-Gut/tags","blobs_url":"https://api.github.com/repos/JWDebelius/American-Gut/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JWDebelius/American-Gut/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JWDebelius/American-Gut/git/refs{/sha}","trees_url":"https://api.github.com/repos/JWDebelius/American-Gut/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JWDebelius/American-Gut/statuses/{sha}","languages_url":"https://api.github.com/repos/JWDebelius/American-Gut/languages","stargazers_url":"https://api.github.com/repos/JWDebelius/American-Gut/stargazers","contributors_url":"https://api.github.com/repos/JWDebelius/American-Gut/contributors","subscribers_url":"https://api.github.com/repos/JWDebelius/American-Gut/subscribers","subscription_url":"https://api.github.com/repos/JWDebelius/American-Gut/subscription","commits_url":"https://api.github.com/repos/JWDebelius/American-Gut/commits{/sha}","git_commits_url":"https://api.github.com/repos/JWDebelius/American-Gut/git/commits{/sha}","comments_url":"https://api.github.com/repos/JWDebelius/American-Gut/comments{/number}","issue_comment_url":"https://api.github.com/repos/JWDebelius/American-Gut/issues/comments{/number}","contents_url":"https://api.github.com/repos/JWDebelius/American-Gut/contents/{+path}","compare_url":"https://api.github.com/repos/JWDebelius/American-Gut/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JWDebelius/American-Gut/merges","archive_url":"https://api.github.com/repos/JWDebelius/American-Gut/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JWDebelius/American-Gut/downloads","issues_url":"https://api.github.com/repos/JWDebelius/American-Gut/issues{/number}","pulls_url":"https://api.github.com/repos/JWDebelius/American-Gut/pulls{/number}","milestones_url":"https://api.github.com/repos/JWDebelius/American-Gut/milestones{/number}","notifications_url":"https://api.github.com/repos/JWDebelius/American-Gut/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JWDebelius/American-Gut/labels{/name}","releases_url":"https://api.github.com/repos/JWDebelius/American-Gut/releases{/id}","created_at":"2013-10-24T04:42:10Z","updated_at":"2015-01-31T03:03:33Z","pushed_at":"2015-03-03T18:21:03Z","git_url":"git://github.com/JWDebelius/American-Gut.git","ssh_url":"git@github.com:JWDebelius/American-Gut.git","clone_url":"https://github.com/JWDebelius/American-Gut.git","svn_url":"https://github.com/JWDebelius/American-Gut","homepage":null,"size":301937,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"biocore:master","ref":"master","sha":"bc71d5758d2cf692c9af179af92459f8658ec6f9","user":{"login":"biocore","id":6241857,"avatar_url":"https://avatars.githubusercontent.com/u/6241857?v=3","gravatar_id":"","url":"https://api.github.com/users/biocore","html_url":"https://github.com/biocore","followers_url":"https://api.github.com/users/biocore/followers","following_url":"https://api.github.com/users/biocore/following{/other_user}","gists_url":"https://api.github.com/users/biocore/gists{/gist_id}","starred_url":"https://api.github.com/users/biocore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biocore/subscriptions","organizations_url":"https://api.github.com/users/biocore/orgs","repos_url":"https://api.github.com/users/biocore/repos","events_url":"https://api.github.com/users/biocore/events{/privacy}","received_events_url":"https://api.github.com/users/biocore/received_events","type":"Organization","site_admin":false},"repo":{"id":13258619,"name":"American-Gut","full_name":"biocore/American-Gut","owner":{"login":"biocore","id":6241857,"avatar_url":"https://avatars.githubusercontent.com/u/6241857?v=3","gravatar_id":"","url":"https://api.github.com/users/biocore","html_url":"https://github.com/biocore","followers_url":"https://api.github.com/users/biocore/followers","following_url":"https://api.github.com/users/biocore/following{/other_user}","gists_url":"https://api.github.com/users/biocore/gists{/gist_id}","starred_url":"https://api.github.com/users/biocore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biocore/subscriptions","organizations_url":"https://api.github.com/users/biocore/orgs","repos_url":"https://api.github.com/users/biocore/repos","events_url":"https://api.github.com/users/biocore/events{/privacy}","received_events_url":"https://api.github.com/users/biocore/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/biocore/American-Gut","description":"American Gut open-access data and IPython notebooks","fork":false,"url":"https://api.github.com/repos/biocore/American-Gut","forks_url":"https://api.github.com/repos/biocore/American-Gut/forks","keys_url":"https://api.github.com/repos/biocore/American-Gut/keys{/key_id}","collaborators_url":"https://api.github.com/repos/biocore/American-Gut/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/biocore/American-Gut/teams","hooks_url":"https://api.github.com/repos/biocore/American-Gut/hooks","issue_events_url":"https://api.github.com/repos/biocore/American-Gut/issues/events{/number}","events_url":"https://api.github.com/repos/biocore/American-Gut/events","assignees_url":"https://api.github.com/repos/biocore/American-Gut/assignees{/user}","branches_url":"https://api.github.com/repos/biocore/American-Gut/branches{/branch}","tags_url":"https://api.github.com/repos/biocore/American-Gut/tags","blobs_url":"https://api.github.com/repos/biocore/American-Gut/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/biocore/American-Gut/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/biocore/American-Gut/git/refs{/sha}","trees_url":"https://api.github.com/repos/biocore/American-Gut/git/trees{/sha}","statuses_url":"https://api.github.com/repos/biocore/American-Gut/statuses/{sha}","languages_url":"https://api.github.com/repos/biocore/American-Gut/languages","stargazers_url":"https://api.github.com/repos/biocore/American-Gut/stargazers","contributors_url":"https://api.github.com/repos/biocore/American-Gut/contributors","subscribers_url":"https://api.github.com/repos/biocore/American-Gut/subscribers","subscription_url":"https://api.github.com/repos/biocore/American-Gut/subscription","commits_url":"https://api.github.com/repos/biocore/American-Gut/commits{/sha}","git_commits_url":"https://api.github.com/repos/biocore/American-Gut/git/commits{/sha}","comments_url":"https://api.github.com/repos/biocore/American-Gut/comments{/number}","issue_comment_url":"https://api.github.com/repos/biocore/American-Gut/issues/comments{/number}","contents_url":"https://api.github.com/repos/biocore/American-Gut/contents/{+path}","compare_url":"https://api.github.com/repos/biocore/American-Gut/compare/{base}...{head}","merges_url":"https://api.github.com/repos/biocore/American-Gut/merges","archive_url":"https://api.github.com/repos/biocore/American-Gut/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/biocore/American-Gut/downloads","issues_url":"https://api.github.com/repos/biocore/American-Gut/issues{/number}","pulls_url":"https://api.github.com/repos/biocore/American-Gut/pulls{/number}","milestones_url":"https://api.github.com/repos/biocore/American-Gut/milestones{/number}","notifications_url":"https://api.github.com/repos/biocore/American-Gut/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/biocore/American-Gut/labels{/name}","releases_url":"https://api.github.com/repos/biocore/American-Gut/releases{/id}","created_at":"2013-10-01T23:39:04Z","updated_at":"2015-03-02T19:53:54Z","pushed_at":"2015-03-02T19:53:53Z","git_url":"git://github.com/biocore/American-Gut.git","ssh_url":"git@github.com:biocore/American-Gut.git","clone_url":"https://github.com/biocore/American-Gut.git","svn_url":"https://github.com/biocore/American-Gut","homepage":null,"size":381993,"stargazers_count":11,"watchers_count":11,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":20,"mirror_url":null,"open_issues_count":17,"forks":20,"open_issues":17,"watchers":11,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/biocore/American-Gut/pulls/127"},"html":{"href":"https://github.com/biocore/American-Gut/pull/127"},"issue":{"href":"https://api.github.com/repos/biocore/American-Gut/issues/127"},"comments":{"href":"https://api.github.com/repos/biocore/American-Gut/issues/127/comments"},"review_comments":{"href":"https://api.github.com/repos/biocore/American-Gut/pulls/127/comments"},"review_comment":{"href":"https://api.github.com/repos/biocore/American-Gut/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/biocore/American-Gut/pulls/127/commits"},"statuses":{"href":"https://api.github.com/repos/biocore/American-Gut/statuses/965b5cef766ed938a71681b7b865cc702845f2e6"}}}}