Pythonのデータ解析支援ライブラリPandas 〜その17 色々なグラフ表示を試してみる:.plot()〜

スポンサーリンク

データ解析支援ライブラリPandas

前回はデータ解析支援ライブラリPandasで新しくデータフレームを作成する方法を解説しました。

Pythonのデータ解析支援ライブラリPandas 〜その16 新規でデータフレームを作成〜
データ解析支援ライブラリPandas前回はデータ解析支援ライブラリPandasで欠損値nanを含む行や列を削除する方法を解説しました。ここまでPandasを使って色々データを扱う方法を解説してきました。それ...

今回はデータをグラフにする方法を解説していきたいと思います。

実はグラフに関しては前に少し解説していたりします。

Pythonのデータ解析支援ライブラリPandasを使ったグラフ表示の方法
データ解析支援ライブラリPandas前回、ランダムなデータファイルを作るプログラムを作成してみました。今回はそのプログラムで作成したデータをデータ解析支援ライブラリPandasを使って読み込み、グラフ表示してみたい...

その際は折れ線グラフだけを紹介していたのですが、他にも散布図や棒グラフ、ヒストグラムも使う機会もあると思うので、もう一度グラフ表示に関してまとめてみようかなと思ったわけです。

ということで準備から行っていきましょう。

まずデータはダミーデータ作成プログラムで作ったこちらのデータを用います。

Pythonでファイル数、行数、列数を指定してダミーデータのファイルを生成するプログラムを作ってみた その2:nanをランダムにもつダミーデータ作成プログラム
nanとは?今回は前に作成したダミーデータのファイルを生成するプログラムをアップデートしていきます。アップデートする方向としては「nan」という値をランダムに入れるということです。ここで疑問。「na...

ちなみに今回はグラフの表示の仕方に集中するため、欠損値Nanはなしのデータとしました。

ということでPandasで読み込んで、一度表示してみましょう。

ちなみに今回はグラフ表示をするので、pandasだけではなく、matplotlibのpyplotもインポートしておきましょう。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df

実行結果

読み込めました。

ではこれでグラフを表示していきましょう。

スポンサーリンク

折れ線グラフを表示する方法:.plot()

まずは一番簡単なグラフ、折れ線グラフを表示してみましょう。

その場合は「データフレーム名.plot()」で表示することができます。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot()

実行結果

折れ線グラフを表示できました。

スポンサーリンク

他のグラフを表示する方法:.plot(kind=”X”)

他のグラフを表示するには、kindというオプションを使います。

ということで「.plot(kind=”X”)」という形になります。

Xには

  • line:折れ線グラフ(オプションを指定しない場合はこれ)
  • bar:棒グラフ(縦方向)
  • barh:横棒グラフ
  • hist:ヒストグラム
  • box:ボックスグラフ
  • kde:カーネル密度推定グラフ
  • density:カーネル密度推定グラフと同様のグラフ
  • area:エリアグラフ
  • pie:円グラフ
  • scatter:散布図
  • hexbin:ヘッスクビングラフ

とりあえず一つずつ試してみましょう。

スポンサーリンク

折れ線グラフ:.plot(kind=”line”)

オプションを指定しなくても折れ線グラフは表示できますが、オプションで指定しても同じなのか確認しておきましょう。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot(kind="line")

実行結果

オプションで指定しない場合と同じグラフが表示されました。

スポンサーリンク

棒グラフ:.plot(kind=”bar”)

次は棒グラフです。

棒グラフの場合はオプションに「kind=”bar”」を追加します。

ということでこんな感じ。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot(kind="bar")

実行結果
スポンサーリンク

横棒グラフ:.plot(kind=”barh”)

横棒グラフを表示する場合は、「kind=”barh”」を追加します。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot(kind="barh")

実行結果
スポンサーリンク

ヒストグラム:.plot(kind=”hist”)、.hist()

ヒストグラムを表示する場合は、オプションに「kind=”hist”」を追加します。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot(kind="hist")

実行結果

ちなみにヒストグラムに関しては、「データフレーム名.hist()」でも表示することができます。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)

df.hist()

実行結果

「.hist()」とするとそれぞれの列のデータがバラバラに表示されるようです。

スポンサーリンク

ボックスグラフ:.plot(kind=”box”)

次はボックスグラフ。

ボックスグラフと言われるとどんなグラフかイメージできないかもしれませんが、株価を表示する、日本語だと箱ひげ図と呼ばれるグラフです。

ボックスグラフを表示するには、オプションに「kind=”box”」を追加します。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot(kind="box")

実行結果
スポンサーリンク

カーネル密度グラフ:.plot(kind=”kde”)

次はカーネル密度グラフというグラフなのですが、ちょっと何に使うか分かりません。

とりあえず表示方法だけ。

カーネル密度グラフを表示する場合は、オプションに「kind=”kde”」を追加します。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot(kind="kde")

実行結果

できたグラフを見ても、何に使うかよく分かりません。

スポンサーリンク

密度グラフ:.plot(kind=”density”)

こちらのグラフはどうやらカーネル密度グラフとよく似たグラフらしいのですが、やはりこちらもよく分かりません。

こちらもとりあえず表示方法だけ。

ということで密度グラフを表示するにはオプションに「kind=”density”」を追加します。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot(kind="density")

実行結果
スポンサーリンク

エリアグラフ:.plot(kind=”area”)

次はエリアグラフです。

こちらは見たら分かると思いますので、まずは表示してみましょう。

表示方法はオプションに「kind=”area”」を追加します。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col = 0)

df.plot(kind="area")

実行結果

 ということでエリアグラフとは累積グラフということでした。

スポンサーリンク

円グラフ:.plot(kind=”pie”)

次は円グラフです。

円グラフを表示するには、オプションに「kind=”pie”」を追加します。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)

df.plot(kind="pie")

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-22-7cc08cb58218> in <module>
      4 df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)
      5 
----> 6 df.plot(kind="pie")

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_core.py in __call__(self, *args, **kwargs)
    745                 if y is None and kwargs.get("subplots") is False:
    746                     msg = "{} requires either y column or 'subplots=True'"
--> 747                     raise ValueError(msg.format(kind))
    748                 elif y is not None:
    749                     if is_integer(y) and not data.columns.holds_integer():

ValueError: pie requires either y column or 'subplots=True'

ここでエラーが出てしまいました。

エラーを見ると「pie requires either y column or ‘subplots=True’」ということで、yの値を追加するか「subplot=True」を追加してくれということでした。

ということで「subplots=True」を足してみましょう。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)

df.plot(kind="pie", subplots=True)

実行結果

後ろにうっすら円グラフが出ていますが、凡例が大きくなってしまっています。

そのうちに表示の方法に関しても解説をしていきますので、今回はとりあえず表示できたということでOKにしておきましょう。

スポンサーリンク

散布図:.plot(kind=”scatter”, x= “X値の列”, y=”Y値の列”)

次は散布図です。

散布図を表示するにはオプションに「kind=”scatter”」を追加します。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)

df.plot(kind="scatter")

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-31-37de54a8b958> in <module>
      4 df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)
      5 
----> 6 df.plot(kind="scatter")

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_core.py in __call__(self, *args, **kwargs)
    736         if kind in self._dataframe_kinds:
    737             if isinstance(data, ABCDataFrame):
--> 738                 return plot_backend.plot(data, x=x, y=y, kind=kind, **kwargs)
    739             else:
    740                 raise ValueError(

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_matplotlib/__init__.py in plot(data, kind, **kwargs)
     59                 ax = plt.gca()
     60             kwargs["ax"] = getattr(ax, "left_ax", ax)
---> 61     plot_obj = PLOT_CLASSES[kind](data, **kwargs)
     62     plot_obj.generate()
     63     plot_obj.draw()

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_matplotlib/core.py in __init__(self, data, x, y, s, c, **kwargs)
    928             # the handling of this argument later
    929             s = 20
--> 930         super().__init__(data, x, y, s=s, **kwargs)
    931         if is_integer(c) and not self.data.columns.holds_integer():
    932             c = self.data.columns[c]

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_matplotlib/core.py in __init__(self, data, x, y, **kwargs)
    862         MPLPlot.__init__(self, data, **kwargs)
    863         if x is None or y is None:
--> 864             raise ValueError(self._kind + " requires an x and y column")
    865         if is_integer(x) and not self.data.columns.holds_integer():
    866             x = self.data.columns[x]

ValueError: scatter requires an x and y column

実は「kind=”scatter”」をオプションに追加するだけではだめで、X値とY値を指定する必要があります。

ということで「kind=”scatter”, x=”x値の列”, y=”y値の列”」となります。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)

df.plot(kind="scatter", x="value_1", y="value_2")

実行結果
スポンサーリンク

六角形ビニンググラフ:.plot(kind=”hexbin”, x=”X値の列”, y=”Y値の列”)

次は六角形ビニンググラフですが、こちらもX値とY値の指定が必要になります。

そのためオプションに「kind=”hexbin”, x=”X値の列”, y=”Y値の列”」を追加する必要があります。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)

df.plot(kind="hexbin", x="value_1", y="value_2")

実行結果

ちなみにX値とY値を指定しないとエラーになります。

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)

df.plot(kind="hexbin")

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-34-b037a64bc373> in <module>
      4 df = pd.read_csv("python-pandas-19_data1.txt", index_col=0)
      5 
----> 6 df.plot(kind="hexbin")

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_core.py in __call__(self, *args, **kwargs)
    736         if kind in self._dataframe_kinds:
    737             if isinstance(data, ABCDataFrame):
--> 738                 return plot_backend.plot(data, x=x, y=y, kind=kind, **kwargs)
    739             else:
    740                 raise ValueError(

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_matplotlib/__init__.py in plot(data, kind, **kwargs)
     59                 ax = plt.gca()
     60             kwargs["ax"] = getattr(ax, "left_ax", ax)
---> 61     plot_obj = PLOT_CLASSES[kind](data, **kwargs)
     62     plot_obj.generate()
     63     plot_obj.draw()

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_matplotlib/core.py in __init__(self, data, x, y, C, **kwargs)
    990 
    991     def __init__(self, data, x, y, C=None, **kwargs):
--> 992         super().__init__(data, x, y, **kwargs)
    993         if is_integer(C) and not self.data.columns.holds_integer():
    994             C = self.data.columns[C]

/opt/anaconda3/lib/python3.7/site-packages/pandas/plotting/_matplotlib/core.py in __init__(self, data, x, y, **kwargs)
    862         MPLPlot.__init__(self, data, **kwargs)
    863         if x is None or y is None:
--> 864             raise ValueError(self._kind + " requires an x and y column")
    865         if is_integer(x) and not self.data.columns.holds_integer():
    866             x = self.data.columns[x]

ValueError: hexbin requires an x and y column

今回とりあえずPandasのplotで使えるグラフを紹介しました。

1行のコマンドだけでここまでのグラフが表示できるというのは、ざっとデータをみたい時にはいいですね。

ただ軽く見るだけであればこれでいいのですが、グラフのサイズだったり、軸名だったり、まだまだ細かいところに手が届いていない状況です。

ということで次回はPandasを使ってグラフを表示するのに、さらに細かい点を設定していく方法を解説していきたいと思います。

ではでは今回はこんな感じで。

コメント

タイトルとURLをコピーしました