1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pandasのメソッドだけでそこそこのグラフを描画したい

Last updated at Posted at 2021-05-07

#はじめに

本記事はこちらの取り組みの一環です。

#使うデータ

↓このようにして集めてきたデータを使います。

結果(画像)
image.png

#やりたいこと

Matplotlibは覚えること多くて嫌!サンプルは美しいけど、プレゼン用じゃなくて対象データの概観を掴みたいだけなのに、何でそんな行数書かなきゃいけないの??1行で何とかしたい!

#使うライブラリ

pandasのグラフ描画用メソッドを使います。裏で動いているのはMatplotlibで、拘らなければこれである程度いけます。
Matplotlib.pyplotもimport必要です。

#実践

###準備

%pip install japanize-matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib
japanize_matplotlib.japanize() 

%matplotlib inline

matplotlibの日本語化についてはこちら。

###pandas.DataFrame.hist()

df.hist()とするだけでとりあえずヒストグラムを書いてくれる。
image.png
ちょっと狭いので、画像サイズを指定し、また、ビン分割を増やして、度数を対数軸にしてみました。

df.hist(figsize=(20,10), bins=20, log=True)

image.png

バルコニー140m2とか、平米単価900万とか一体何なんでしょうね。後ほど異常値(元データの入力ミスなど)かどうか調べることにします。

###pandas.DataFrame.plot()

これはさすがにdf.plot()では何が起きたのかよく分からないグラフが吐き出されます。(エラーにはならない)
image.png

しかし、グラフの種類と使うカラムを指定すれば、df.plot(kind='scatter', x="総面積(m2)", y='価格(万円)')でExcelのデフォルトの散布図くらいのものは描けます。
image.png

もう少しいろいろオプションを指定するとこんな感じ。

df.plot(kind='scatter', x="総面積(m2)", y='価格(万円)', c='築年数', colormap='jet', loglog=True, figsize=(10,6), alpha=0.3, sharex=False)

image.png

  • c='築年数', colormap='jet' カラーマップを使えば、3次元データを可視化できます。jetのほかにも以下から選べばOK

  • loglog=True両対数軸の指定。片対数はlogx=Trueあるいはlogy=Trueです。尚、ヒストグラムのときの縦軸に対数を取るときは、logyではなく単にlog=Trueとしました。粉体の粒子径とか、ポリマーの分子量とか、所得とか、ピラミッド状に分布しているものは対数軸を取ると見やすいですね。

  • figsize=(10,6)単位はインチ。

  • alpha=0.3不透明度?プロットが多い時はalphaを指定したほうがデータの重なり具合が分かりやすい。

  • sharex=Falseはpandasのバグ対応で、デフォルトだとx軸のラベルや目盛り数字が消えてしまいます。

住所(行政区)別にグルーピングしてプロットの色を変えたい、などと思うときには、seabornでhueを指定するのがよいようですが、ここでは扱いません。

###pandas.DataFrame.boxplot()

df.boxplot(column='価格(万円)', by='住所2', figsize=(10,6), rot=90)

image.png

上側の外れ値が多くて見にくいですが、df.boxplot()メソッドの引数ではlogy=Trueと指定することが出来ません。これ以上拘るなら、サンプル事例の記事も少ないpandasのメソッドで無理に頭を捻るよりも、Figure, Axesのクラスの意味するところを理解してmatplotlibやseabornの公式のサンプルを参考にしたほうが良さそうです。

fig1, ax1 = plt.subplots(figsize=(10, 6))
ax1.set_yscale('log')
ax1.set_ylabel('価格(万円)')
df.boxplot(ax=ax1, column='価格(万円)', by='住所2', rot=90, showmeans=True)

image.png

#その他参考情報

xlabelが表示されないpandasのバグの情報は大変助かりました。

こういう気合の入ったブログには頭が下がります。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?