anaconda, Pythonの導入とヒートマップの作成

anaconda, Pythonの導入とヒートマップの作成

 

忙しい時期がひと段落したので(まだ終わってないけど)、少しずつ最近身につけたスキルを公開して行きます。

 

目的は、C言語 - gnuplotでは描きにくいヒートマップを、Pythonで描きたいと思ったことです。

 

まず、anacondaという(Pythonに必要なツールがたくさん入った?、天文系だけ?)ツールをインストールします。

www.anaconda.com

のページからPython 3の方をダウンロードしインストールします。

普通にインストールしてください(特に変わったことはしない)。

 

その後、ヒートマップを綺麗に書くためのモジュールである「seaborn」をインストールします。anaconda入ってるので、condaコマンドを使います。

conda install seaborn

これで、準備が整ったので、「jupyter notebook」を使ってプログラムを書いていきます。

jupyter notebookとは、ブラウザ上でPythonの編集、実行ができるツールで、簡単にプログラムと実行ができます。

まぁ、騙されたと思って

jupyter notebook

と打ち込んでください(描きたいデータの入ったディレクトリのターミナル上に)

 

するとブラウザが立ち上がります。

f:id:narimonogashira:20190210180452p:plain

(私の個人的なファイルがいくつか入っていますが、気にせず)

その後、右上の「New」と書かれた下矢印を選択し、Python 3を選択します。

(黒丸のやつ)

f:id:narimonogashira:20190210180741p:plain

すると、こんなのが新しいタブで立ち上がります。

f:id:narimonogashira:20190210180818p:plain

この「In[ ]:」と書かれた部分にPythonのプログラムを書き込んでいくわけです。

実行は「Shift」を押しながら「enter(return)」です。

 

Inputデータは、

 x y z

 1 10 100

 2 20 200

といった縦に並んだ形を想定しています。

そのため、ヒートマップを描くプログラムの前にピボットを作ります。

----

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

df = pd.read_csv("map1.txt", dtype="float", sep="\s+")
pivot = pd.pivot_table(data=df, values='z', columns='x', index='y', aggfunc=np.mean)
print(pivot)

----

上から4行がimportしたものです(C言語でいう#include)。

で、5行目がmap1.txtを読み込んで、「df」に入れた。空白でseparateしているので、sep="\s+"です。

6行目がdfをピボットにしてpivotに入れる作業。その際、xを横軸に、yを縦軸に、zを値にするように設定しています

7行目でprintし中身を確認。

 

シフト押しながらエンターすると、ピボットが出来上がりました。

f:id:narimonogashira:20190210181535p:plain

いよいよ、これを使ってヒートマップを描きます。

----

plt.figure(figsize=(12, 9))
sns.heatmap(pivot, vmin='-12', vmax='-8', cmap='Reds')
plt.savefig('./heatmap_sSFR_all.png')

----

1行目でサイズを決め、2行目でプロット(max=-8,min=-12,カラーは赤)、3行目で保存です。

f:id:narimonogashira:20190210181804p:plain

結果、このようなヒートマップが描けました。

 

Pythonを導入し始めたところ(ほぼ描画専門として)で、わからないところも多いです。

コメントや、効率的になる方法があれば教えてください。

 

ちなみに、ヒートマップの軸を反転させる方法ってあるんですかね???