Pythonによるデータ分析

PandasのPlot(matplotlib)

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

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

共通のコード

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

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

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

import pandas as pd# パッケージの読み込み
import matplotlib.pyplot as plt# パッケージの読み込み
%matplotlib inline
df= pd.read_csv("Data.csv")# データを読み込み

知りたいグラフへの近道

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

ヒストグラム
2次元ヒストグラム

備忘録
グラフのサイズ

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

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

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

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

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

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

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

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

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

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

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

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

Pandasの場合、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の変数を指定して、折れ線グラフを描く
折れ線グラフ

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

seabornの散布図行列 を使うと、すべての量的変数の組み合わせについて、散布図行列を作れるのですが、 変数が多いと、散布図行列が煩雑になって、よくわからないものになりがちです。

一方で、実務的には、全部の変数同士の組み合わせよりも、目的変数と他のすべての変数の組み合わせだけが、 まず知りたいことがあります。 PandasのPlotでは、このグラフが簡単に作れます。

こういう散布図ですが、Pandasの散布図の機能で作るのは、とても大変です。 散布図の機能を入口にするのではなく、折れ線グラフの機能を入口にして、線を消してしまうことで散布図を作ります。

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

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

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

ヒストグラム

2次元ヒストグラム以外は、 seaborn と組み合わせで使ったりしますので、 seaborn のページに入れました。

2次元ヒストグラム

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

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

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

備忘録

グラフのサイズ

グラフのサイズですが、左がデフォルトで、右が下のコードでサイズを調整したものです。 グラフを描く行の前に、サイズ調整の行を入れます。

「df.」で始まるPandasのPlotについては、ヒストグラム等でも同じです。

df.plot(subplots=True,figsize=(3,3)) # グラフのサイズを変える

折れ線グラフ 折れ線グラフ

PandasのPlotとseabornの使い分け

PandasのPlotは、左の形式のデータを扱うのが得意です。 右の形式の場合、グラフを並べたり、重ね合わせたりするためのプログラムを自分で作る必要があります。

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

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

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

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



Pythonによるデータ分析

データサイエンス教室