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