#はじめに
本記事はこちらの取り組みの一環です。
#使うデータ
↓このようにして集めてきたデータを使います。
#やりたいこと
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()
とするだけでとりあえずヒストグラムを書いてくれる。
ちょっと狭いので、画像サイズを指定し、また、ビン分割を増やして、度数を対数軸にしてみました。
df.hist(figsize=(20,10), bins=20, log=True)
バルコニー140m2とか、平米単価900万とか一体何なんでしょうね。後ほど異常値(元データの入力ミスなど)かどうか調べることにします。
###pandas.DataFrame.plot()
これはさすがにdf.plot()
では何が起きたのかよく分からないグラフが吐き出されます。(エラーにはならない)
しかし、グラフの種類と使うカラムを指定すれば、df.plot(kind='scatter', x="総面積(m2)", y='価格(万円)')
でExcelのデフォルトの散布図くらいのものは描けます。
もう少しいろいろオプションを指定するとこんな感じ。
df.plot(kind='scatter', x="総面積(m2)", y='価格(万円)', c='築年数', colormap='jet', loglog=True, figsize=(10,6), alpha=0.3, sharex=False)
-
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)
上側の外れ値が多くて見にくいですが、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)
#その他参考情報
xlabelが表示されないpandasのバグの情報は大変助かりました。
こういう気合の入ったブログには頭が下がります。