kuroの覚え書き

96の個人的覚え書き

clusteringだけmatplotlibで

ヒートマップの描画ははじめてseabornを使ってみたのだが、噂通り細かい調節は難しい。
今回系統樹の枝の長さを入れたかったのだが、結局方法にたどり着けなかったので、系統樹の部分だけmatplotlibで描いてみる。
f:id:k-kuro:20200114145420p:plain
枝が自動で色がついていたり、まだ改良の余地はあるかな。

@app.route('/cluster', methods=['GET', 'POST'])
def cluster_index():
    user = g.user.name
    form=StatForm()
    dir = "./user/" + user + "/cluster"
    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.fig_dpi.data:
        	fig_dpi=form.fig_dpi.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_size.data:
        	f_size=form.font_size.data

        df = pd.read_csv(input, index_col=0)
        df_t = df.T
        header = df.columns
        from scipy.spatial.distance import pdist
        linkage_result = linkage(df_t, method=c_method, metric=c_dist)
        plt.figure(num=None, figsize=(fig_x,fig_y), dpi=fig_dpi, facecolor='w', edgecolor='k')
        dendrogram(linkage_result, leaf_font_size=f_size, labels=header)
        cluster_fig = dir + "/cluster_" + str(time.time()) + ".png"
        plt.savefig(cluster_fig)
        img_url = "../../static/" + cluster_fig

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

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