トップページ | ひとつ上のページ | 目次ページ | このサイトについて | ENGLISH

PandaのPlot(matplotlib)

Pandaは、Pythonのパッケージのひとつです。 多変量解析 の専用ソフトは、表形式になっているデータを用意して、それを分析するようになっていますが、 Pandaがあると、Pythonでも表形式のデータを扱えるようになります。

PandaのPlotは、Pandaを使いながら グラフィカル分析 をするためのソフトです。 Pandaと、matplotlibというグラフソフトの組み合わせになっています。

共通のコード

使用例は下記になります。

下記は、コピーペーストで、そのまま使えます。 この例では、グラフを描くためのPythonのプログラムが保存されているフォルダと同じ所に、 「Data.csv」という名前でデータが入っている事を想定しています。

「df」から始まる命令文の前に、下記は必ず必要です。

import pandas as pd# パッケージの読み込み
import matplotlib.pyplot as plt# パッケージの読み込み
%matplotlib inline # Jupyterの中にグラフを描く
df= pd.read_csv("Data.csv")# データを読み込み

知りたいグラフへの近道

たくさんの変数を見るためのグラフ
全部の量的変数のサンプル順の折れ線グラフ
等間隔ではない折れ線グラフ
ひとつの量的変数と、他のすべての量的変数との散布図

ヒストグラム
変数別のヒストグラム
グループ別のヒストグラム
2次元ヒストグラム

たくさんの変数を見るためのグラフ

ggplot2 の場合、 折れ線グラフ は、 2次元散布図 のプロットが線でつながったものとして作られるのが基本なので、 データを等間隔に並べるにはひと手間必要です。 Pandaの場合は、その手間をかけないでも、等間隔の折れ線グラフが簡単に作れます。

全部の量的変数のサンプル順の折れ線グラフ

データは、「X1」、「Y1」、「Y2」、「Y3」、という列名で数値が入っていることを想定しています。

・・・ 共通のコード に戻る・・・

df.plot()# 折れ線グラフを描く
折れ線グラフ

たったこれだけなのですが、すべての数値データの変数について、1枚のグラフに描いてくれます。 そのため、とりあえず、全部の変数を眺めてみたい時に便利です。

ただ、このデータの場合は、X1以外の変数は一直線のように見えるだけで、それ以上のことはよくわかりません。 その場合は、変数毎にグラフを分けます。 ちなみに、こういうグラフは、 Excelのスパークライン に近いです。

df.plot(subplots=True)# 変数毎に分けて、折れ線グラフを描く
折れ線グラフ

Y軸の範囲は、同じにすることもできます。

df.plot(subplots=True, sharey=True))# Y軸の範囲を合わせて、折れ線グラフを描く
折れ線グラフ

等間隔ではない折れ線グラフ

Pandaの場合、X軸の変数が指定されると、折れ線グラフは散布図のプロットを、、元のデータの最初にあるものから順に、線で結んだものになります。 X軸の変数が等間隔のデータになっていなければ、プロットも等間隔ではなくなります。

X軸の変数だけが指定されると、折れ線グラフはその変数以外のすべての数値データの変数のグラフになります。

プロットが等間隔ではない場合、折れ線だけだと、プロットの位置がわからなくなるので、プロットも表示すると良いです。

・・・ 共通のコード に戻る・・・

df.plot(x = 'X1',marker="o")# Xの変数を指定して、プロットも表示して、折れ線グラフを描く
折れ線グラフ

変数毎にグラフを分けることもできます。

df.plot(x = 'X1', subplots=True, marker="o")# Xの変数を指定して、プロットも表示して、折れ線グラフを描く
折れ線グラフ

Yの変数をひとつだけ、指定することもできます。

df.plot(x = 'X1',y ='Y1',marker="o")# XとYの変数を指定して、折れ線グラフを描く
折れ線グラフ

ひとつの量的変数と、他のすべての量的変数との散布図

PandaのPlotには散布図を描く機能もあるのですが、その場合、質的変数でグラフを分割しようとすると手間がかかります。

こういう時は、散布図の機能を入口にするのではなく、折れ線グラフの機能を入口にして、線を消してしまうことで散布図を作る方が、 確実にやりたいことができます。 折れ線グラフでX軸の変数を指定すると、散布図のプロットを線で結んだものになっていることを利用します。

この機能を使う時は、X軸にしたい変数をソートしておかないと、X軸の範囲がおかしくなるので、そのための1行がグラフを描くコードの前に必要です。

・・・ 共通のコード に戻る・・・

df =df.sort_values('Y1') # X軸にした変数で、データを並び替える。
df.plot(x = 'Y1', subplots=True, marker="o", linestyle='None') # ひとつの量的変通と、他のすべての量的変数で散布図を描く
ひとつの量的変数と、他のすべての量的変数との散布図

seaborn には、すべての量的変数の組み合わせについて、散布図行列を作る機能があるのですが、 実務的には、目的変数と、他のすべての変数の組み合わせをまず知りたいことがあります。 また、変数が多いと、散布図行列は煩雑になって、 よくわからないものになりますので、 こういう方法があると便利です。

ヒストグラム

ヒストグラム の作り方です。

変数別のヒストグラム

データは、「Y1」、「Y2」、「Y3」、という列名で数値が入っていることを想定しています。

・・・ 共通のコード に戻る・・・

df.plot.hist()# ヒストグラムを描く
ヒストグラム

Pandaは、とりあえず全部の数値データの変数をヒストグラムにしてしまう使い方が簡単にできます。

グラフが重なり合ってしまう場合は、分けると良いです。

df.plot.hist(subplots=True)# グラフを分けてヒストグラムを描く
ヒストグラム

グループ別(層別)のヒストグラム

データは、「Y1」という列名で数値が入っていて、「C1」という列名でカテゴリが書かれていることを想定しています。

df.groupby("C1").hist("Y1")# 層別のヒストグラムを描く
ヒストグラム

一見良さそうなのですが、グループ毎にX軸の範囲が違うので、グラフを比べられません。 そこで、全部のグラフを見て、X軸の範囲を決めて設定します。

df.groupby("C1").hist("Y1", range=(9,13))# 層別のヒストグラムを描く
ヒストグラム
グループの名前の「A1」、「A2」、「A3」というのがどこにも入っていないので、少々難ありです。

グループ別のヒストグラム(筆者の環境で急に使えなくなったコード)

下のコードは、筆者が最初に試した時には、下のグラフが作れたのですが、後日、もう一度使おうとしたら、エラーが出るようになってしまいました。 原因は不明です。 df.plot.hist(column="Y1", by="C1", sharex=True, layout=(3, 1))# 層別のヒストグラムを描く
ヒストグラム

「sharex=True」を入れないと、変数毎にX軸の範囲が変わってしまうので、比較することができなくなります。 「layout=(3, 1)」は、3つのグラフを縦に並べて比べるために指定しています。 指定しないと、縦、横に、適度に並べてくれます。

2次元ヒストグラム

2次元ヒストグラムは、2変数の分布の頻度を表すグラフです。 度数を棒の長さにして、立体的な図で表すのではなく、 ヒートマップ にして色で表すことで、平面のグラフになっています。 PandaのPlotではないのですが、matplotlibでは簡単に作れるようになっています。

データは、「Y1」、「X1」という列名で数値が入っていることを想定しています。

plt.hist2d(x=df.X1,y=df.Y1)# 2次元ヒストグラムを描く
2次元ヒストグラム

PandaのPlotとseabornの使い分け

PandaのPlotは、左の形式のデータを扱うのが得意です。 右の形式の場合、 グループ別のヒストグラム はできたりするのですが、それ以外は、グラフを並べたり、重ね合わせたりするためのプログラムを自分で作る必要があります。

右の形式を使いたい場合は、 seaborn の方が良いです。 この例では、グループを表す質的変数は、「C1」の1個だけですが、 2個以上の場合は、seabornの方が圧倒的に良いです。 seabornでは、質的変数が3、4個あって細かく分類した場合でも、簡単にグラフが作れます。
データの形 データの形

PandaのPlotと seaborn は、Python上で使い分けることは難しくありません。 平仮名と片仮名の使い分けくらいの感覚です。

seabornの方が、見た目がきれいですし、できることが豊富です。 ただ、新しいソフトのためか、よくわからないバグがけっこうあります。 そのため、基本はseabornにして、seabornではうまく行かないことで、PandaのPlotを使うのが良いようです。

箱ひげ図など、seabornを使った方が良いものは、このページには入れませんでした。 このページにまとめたPandaのPlotの使い方は、筆者が試しみた中で、seabornではできなくて、PandaのPlotだとできることになります。



順路 次は seaborn

Tweet データサイエンス教室