Beispiel #1
0
def main():
    gn = Granatum()

    gene_scores = gn.get_import("gene_scores")
    species = gn.get_arg("species")
    gset_group_id = gn.get_arg("gset_group_id")
    n_repeats = gn.get_arg("n_repeats")
    alterChoice = gn.get_arg("alterChoice")

    if alterChoice=="pos":
        gene_scores = dict(filter(lambda elem: elem[1] >= 0.0, gene_scores.items()))
    elif alterChoice=="neg":
        gene_scores = dict(filter(lambda elem: elem[1] < 0.0, gene_scores.items()))
        gene_scores = { k: abs(v) for k, v in gene_scores.items() }

    gene_ids = gene_scores.keys()
    gene_scores = gene_scores.values()

    gene_id_type = guess_gene_id_type(list(gene_ids)[:5])
    if gene_id_type != 'symbol':
        gene_ids = convert_gene_ids(gene_ids, gene_id_type, 'symbol', species)

    if species == "human":
        pass
    elif species == "mouse":
        gene_ids = zgsea.to_human_homolog(gene_ids, "mouse")
    else:
        raise ValueError()

    result_df = zgsea.gsea(gene_ids, gene_scores, gset_group_id, n_repeats=n_repeats)
    if result_df is None:
        gn.add_markdown('No gene set is enriched with your given genes.')
    else:
        result_df = result_df[["gset_name", "gset_size", "nes", "p_val", "fdr"]]
        gn.add_pandas_df(result_df)
        gn.export(result_df.to_csv(index=False), 'gsea_results.csv', kind='raw', meta=None, raw=True)
        newdict = dict(zip(result_df.index.tolist(), result_df['nes'].tolist()))
        print(newdict, flush=True)
        gn.export(newdict, 'nes', 'geneMeta')

    gn.commit()
Beispiel #2
0
def main():
    gn = Granatum()

    tb1 = gn.pandas_from_assay(gn.get_import('assay1'))
    tb2 = gn.pandas_from_assay(gn.get_import('assay2'))
    label1 = gn.get_arg('label1')
    label2 = gn.get_arg('label2')
    direction = gn.get_arg('direction')
    normalization = gn.get_arg('normalization')

    if direction == 'samples':
        tb1 = tb1.T
        tb2 = tb2.T

    overlapped_index = set(tb1.index) & set(tb2.index)
    tb1.index = [
        f"{label1}_{x}" if x in overlapped_index else x for x in tb1.index
    ]
    tb2.index = [
        f"{label2}_{x}" if x in overlapped_index else x for x in tb2.index
    ]

    if normalization == 'none':
        tb = pd.concat([tb1, tb2], axis=0)
    elif normalization == 'frobenius':
        ntb1 = np.linalg.norm(tb1)
        ntb2 = np.linalg.norm(tb2)
        ntb = np.mean([ntb1, ntb2])
        fct1 = ntb / ntb1
        fct2 = ntb / ntb2
        tb = pd.concat([tb1 * fct1, tb2 * fct2], axis=0)
        gn.add_markdown(f"""\

Normalization info:

  - Assay **{label1}** is multiplied by {fct1}
  - Assay **{label2}** is multiplied by {fct2}
""")
    elif normalization == 'mean':
        ntb1 = np.mean(tb1)
        ntb2 = np.mean(tb2)
        ntb = np.mean([ntb1, ntb2])
        fct1 = ntb / ntb1
        fct2 = ntb / ntb2
        tb = pd.concat([tb1 * fct1, tb2 * fct2], axis=0)

        gn.add_markdown(f"""\

Normalization info:",

  - Assay **{label1}** is multiplied by {fct1}
  - Assay **{label2}** is multiplied by {fct2}
""")
    else:
        raise ValueError()

    if direction == 'samples':
        tb = tb.T

    gn.add_markdown(f"""\
You combined the following assays:

  - Assay 1 (with {tb1.shape[0]} genes and {tb1.shape[1]} cells)
  - Assay 2 (with {tb2.shape[0]} genes and {tb2.shape[1]} cells)

into:

  - Combined Assay (with {tb.shape[0]} genes and {tb.shape[1]} cells)
""")

    gn.export_statically(gn.assay_from_pandas(tb), 'Combined assay')

    if direction == 'samples':
        meta_type = 'sampleMeta'
    elif direction == 'genes':
        meta_type = 'geneMeta'
    else:
        raise ValueError()

    gn.export(
        {
            **{x: label1
               for x in tb1.index},
            **{x: label2
               for x in tb2.index}
        }, 'Assay label', meta_type)

    gn.commit()