Pythonで箱ひげ図を描く
Pythonで箱ひげ図を描画します。いくつかの方法を紹介します。
目次
pandasで箱ひげ図を描画する
pandasのDataFrameに箱ひげ図を描画するメソッドがあります。
df.boxplot([column], [by], [ax], [fontsize], [rot], [grid], [figsize], [layout], [return_type], [backend], [kwargs])
matplotlibをバックエンドにして、DataFrameの箱ひげ図を描画します。
変数 |
型 |
内容 |
---|---|---|
df |
DataFrame |
プロットするDataFrame。 |
column |
str, list |
プロットする列、または列のリスト。 |
by |
str,array |
省略可。グループ分けする列の指定。 |
ax |
Axes |
省略可。規定値はNone。描画先のAxesオブジェクト。 |
fontsize |
float,str |
省略可。規定値はNone。軸ラベルのサイズ。 |
rot |
int,float |
省略可。規定値は0。ラベルの角度。 |
grid |
bool |
省略可。規定値はTrue。グリッド表示するかどうか。 |
figsize |
tuple |
省略可。規定値はNone。図の大きさ。(width,height) |
layout |
tuple |
省略可。規定値はNone。subplotの場合の描画位置。 |
return_type |
str |
省略可。規定値はaxes。戻り値の型。 |
backend |
str |
省略可。規定値はNone。バックエンドの指定。 |
kwargs |
省略可。matplotlib.pyplot.boxplotに渡す引数。 |
描画例
seabornのdiamondsデータセットを使用して、箱ひげ図を描画してみます。
diamondsデータセットは、caratやcutなどの特徴量から価格を推定するデータセットです。priceについて、箱ひげ図を描画してみましょう。
最初に、price列の統計量を表示してみます。
import pandas as pd
import seaborn as sns
data = sns.load_dataset('diamonds')
print(data['price'].describe())
count 53940.000000
mean 3932.799722
std 3989.439738
min 326.000000
25% 950.000000
50% 2401.000000
75% 5324.250000
max 18823.000000
Name: price, dtype: float64
最小値(Q0)が326、第一四分位点(Q1)が950、第二四分位点(中央値、Q2)が2,401、第三四分位点(Q3)が5,324.25、最大値(Q4)が18,823となっています。
ではprice列の箱ひげ図を描画します。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
data = sns.load_dataset('diamonds')
data.boxplot(column='price')
plt.show()
既定では外れ値が表示されます。第一四分位点または第三四分位点からボックスの1.5倍以上離れた値は外れ値とされます。
外れ値を表示しないようにする場合は、whis引数にrangeを指定します。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
data = sns.load_dataset('diamonds')
data.boxplot(column='price', whis='range')
plt.show()
次に、priceをcutでグループ分けして箱ひげ図を描画します。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
data = sns.load_dataset('diamonds')
data.boxplot(column='price', by='cut')
plt.show()
cut列のクラス別にpriceの分布がわかるようになりました。
各クラスの箱が似たような価格帯にありますので、cutではpriceの推定はできなさそうです。
seabornで箱ひげ図を描画する
seabornには箱ひげ図を描画する関数があります。
import seaborn as sns
sns.boxplot([x], [y], [hue], [data], [order], [hue_order], [orient], [color], [palette], [saturation], [width], [dodge], [fliersize], [linewidth], [whis], [ax], [kwargs])
変数 |
型 |
内容 |
---|---|---|
x |
str |
省略可。規定値はNone。カテゴリ分けする列の指定。 |
y |
str |
省略可。規定値はNone。プロットする列の指定。 |
hue |
str |
省略可。規定値はNone。クラス分けする列の指定。 |
data |
DataFrame, array |
省略可。規定値はNone。プロットするデータ。 |
order |
list |
省略可。規定値はNone。カテゴリの表示順。 |
hue_order |
list |
省略可。規定値はNone。クラスの表示順。 |
orient |
str |
省略可。規定値はNone。グラフの向き(vまたはh)。 |
color |
color |
省略可。規定値はNone。色指定。 |
palette |
palette |
省略可。規定値はNone。hueの色指定。 |
saturation |
float |
省略可。規定値は0.75。 |
width |
float |
省略可。規定値は0.8。 |
dodge |
bool |
省略可。規定値はTrue。 |
fliersize |
float |
省略可。規定値は5。 |
linewidth |
float |
省略可。規定値はNone。 |
whis |
float |
省略可。規定値は1.5。ヒゲの範囲。この範囲外は外れ値。 |
ax |
Axes |
省略可。規定値はNone。プロットするAxesオブジェクト。 |
kwargs |
省略可。matplotlib.axes.Axes.boxplotに渡す引数。 |
seabornの描画例
seabornで上記のpandasの場合と同じ描画をします。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
data = sns.load_dataset('diamonds')
sns.boxplot(y='price', data=data)
plt.show()
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
data = sns.load_dataset('diamonds')
sns.boxplot(x='cut', y='price', data=data)
plt.show()
公開日
広告
Pythonでデータ分析カテゴリの投稿
- DataFrameの欠損値を特定の値で置き換える
- Pythonでpandas入門1(データの入力とデータへのアクセス)
- Pythonでpandas入門2(データの追加と削除および並び替え)
- Pythonでpandas入門3(データの統計量の計算)
- Pythonでpandas入門4(データの連結と結合)
- Pythonでpandas入門5(欠損値(NaN)の扱い)
- Pythonでデータを学習用と検証用に分割する
- Pythonでデータ分析入門1(初めての回帰分析)
- Pythonでデータ分析入門2(初めてのロジスティック回帰(2クラス分類))
- Pythonでデータ分析入門3(初めての決定木(多クラス分類))
- Pythonで回帰モデルの評価関数
- Pythonで箱ひげ図を描く
- Python(pandas)でExcelファイルを読み込んでDataFrameにする
- pandasでカテゴリ変数を数値データに変換する
- pandasでクロス集計する
- pandasで同じデータ(要素)がいくつあるか調べる
- pandasで相関係数を計算する
- pandasとseabornでデータの可視化(散布図行列)
- pandasの学習用のデータセットを入手する
- scikit-learnのサンプルデータセットを入手する