kuroの覚え書き

96の個人的覚え書き

ClusteringとHeatmap

RNAseqのデータ解析で、とりあえずやっておくことといえば、遺伝子発現プロファイルをクラスタリングしてヒートマップを描くということだろうか。
R使いならRでやるんだろうけど、Rはあまり良く知らないため、これまで
MeVを使ってきた。最近のバージョンではWEBアプリ化されているらしいが、Javaスタンドアローン版を使っていた。
しかし、論文を書くとき、色々なソフトウェアの引用が面倒なので、できればPythonに一本化したいなということで、実装してみた。
f:id:k-kuro:20200113191327p:plain
データはI. Nookaewらの論文から拝借。

webアプリの該当部分抜粋。

@app.route('/heatmap', methods=['GET', 'POST'])
def heatmap_index():
    import numpy as np
    import pandas as pd
    import matplotlib
    import matplotlib.pyplot as plt
    import seaborn as sns
    user = g.user.name
    form=StatForm()
    dir = "./user/" + user + "/hm"
    if os.path.exists(dir):
        shutil.rmtree(dir)
    if not os.path.exists(dir):
        os.makedirs(dir)
    input = dir + "/input.txt"
    output = dir + "/results.txt"

    if request.method == 'POST':
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        if file.filename == '':
            flash('No data input')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            file.save(input)

    if os.path.exists(input):
        if form.fig_x.data:
        	fig_x=form.fig_x.data
        if form.fig_y.data:
        	fig_y=form.fig_y.data
        if form.c_map.data:
        	c_map=form.c_map.data
        if form.c_method.data:
        	c_method=form.c_method.data
        if form.c_dist.data:
        	c_dist=form.c_dist.data
        if form.font_scale.data:
        	f_scale=form.font_scale.data
        rob='False'
        if form.rob.data:
            rob='True'
        sns.set()
        sns.set(style='whitegrid', font_scale=f_scale)
        df = pd.read_csv(input, index_col=0)
        header = df.columns
        gr = sns.clustermap(df[[h for h in header]], method=c_method, metric=c_dist, robust=rob, cmap=c_map, figsize=(fig_x,fig_y))
        denix = gr.dendrogram_row.reordered_ind
        dengid = [df.index[u] for u in denix]
        # gr.cax.set_position([.05, .2, .03, .45])
        # gr.fig.suptitle('heatmap', y=0.75)
        heat_fig = dir + "/heatmap_" + str(time.time()) + ".png"
        plt.savefig(heat_fig)
        img_url = "../../static/" + heat_fig

        return render_template('/tools/heatmap.html', form=form, img_url=img_url)

    return render_template('/tools/heatmap.html', form=form)