19回では、曲線のグラフ作成を行いまいした。
今回はPYTHONで散布図(さんぷず)を作成します。散布図と言うのは、点でデータをプロットしたグラフを言います。データの分布が一目で分かるので、データの偏りを判断することが出来ます。
では、早速始めてみましょう。
ライブラリ『matplotlib』、『numpy』を使用
散布図を作成する為に、『matplotlib』と『numpy』のライブラリを使用します。
『matplotlib』はグラフを作成する為に使用するライブラリで、『numpy』はデータを取り扱うライブラリになります。
グラフ作成では必須のライブラリになります。
散布図を作成するプログラム
import matplotlib.pyplot as plt import numpy as np plt.xlabel('x label') plt.ylabel('y label') plt.title('Scatter Plot') plt.grid(True) x=np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y=np.array([20, 10, 29, 32, 45, 53, 62, 71, 86, 95, 88]) plt.scatter(x, y, s=70, c="blue", marker="x") plt.show()
上記のプログラムで下記の散布図が作成されます。では、解説していきます。
1,2行:ライブラリの導入の記述になります。
4~6行:グラフ上のラベル、タイトルを付けます。グラフを作成する上で、X軸、Y軸が何を表しているかを示すためにラベルを付けた方がいいです。また、グラフにタイトルを付けると、自分で、データ整理するのが容易になります。
7行:グリッド(補助線)の表示をするかを決めます。この文を書かない時は、グリッドが表示されません。なので、使用しない場合はFalseにする必要はなく、この文を書かないでおくことをおススメします。散布図では、偏りを見る事が多いので、グリッドは使用しないケースが多いかもしれません。
9,10行目:X軸、Y軸のデータです。通常であれば、表計算ソフトやCVSファイルでまとめられていますが、今回は分かり易くする為に、プログラム上で記載しました。
12行目:散布図を作成するコマンドになります。
プロットする大きさを変える事で、見やすさが変わってきます。
プロットする色を変える事で、他のデータとの見分けが出来ます。
プロットする印を変える事で、他のデータとの見分けが出来ます。今回は”x”マークでプロットしていますが、例えば、”a”でプロットしようとしても出来ません。きちんと対応したマークがあります。詳しくは、下記のmatplotlibの公式サイトをご覧ください。プロットの印(marker)を定義しない場合は、〇になります。
14行目:このコマンドでグラフが表示されます。
簡単ですよね!
CSVファイルからの読み込み、encodingを気を付けよう!!
次はCSVファイルから読み込む場合です。
import matplotlib.pyplot as plt import numpy as np data = np.genfromtxt('C:/Labo/buffer/scatterplot.csv', delimiter=',', names=['x', 'y'], encoding='utf_16') plt.xlabel('x label') plt.ylabel('y label') plt.title('Scatter Plot') plt.grid(True) plt.scatter(data['x'], data['y'], s=70, c="blue", marker="x") plt.show()
4,5行目:numpyのgenfromtextという関数を使用します。
実際に使用する場合、この関数を応用していただきたいのですが、最後のencodingだけ気を付けて下さい。
通常windowsでcsvを作成する場合、Unicode(UTF-16)で書き込み、読み込みがされます。下記はLibreOffice CalcでCSVファイルを読み込んだ場合です。
現状のPYTHONのencodingは、指定をしない(デフォルトの場合)とUTF-8で読み込みされます。なので、UTF-16で保存されているCSVを読み込む場合は、encoding=’utf_16’と指定しないと、エラーになるので注意して下さい。
CSVファイルの読み込みでエラーが発生した場合は、ファイルのencodingを確認して下さい。
まとめ
いかがだったでしょうか。
個人的には、データをグラフ化する時に散布図を使用することが多かったので、今回の記事が参考になったと思われる方が多いと思っています。
是非、みなさんのデータをグラフ化してみて下さいね。
コメント