Python
 Computer >> コンピューター >  >> プログラミング >> Python

pandasで箱ひげ図を中央値の順に並べ替える方法


pandasで作成した箱ひげ図を、各列の中央値(メディアン)の大きさ順に並べ替えたいケースはよくあります。本記事では、groupby()median()sort_values()を組み合わせて、中央値順に箱ひげ図を並べ替える具体的な手順を解説します。

実装の手順

  • plt.rcParamsで図のサイズを設定し、サブプロット間・周囲の余白(パディング)を自動調整します。

  • 3つの列(marks、names、dob)を持つ、2次元でサイズ変更可能な表形式データのpandasデータフレームを作成します。

  • groupby()を使って、データフレームの要素をmarksdobでグループ化します。

  • median()で各グループの中央値を求めます。

  • sort_values()で中央値を降順に並べ替えます。

  • 並べ替えた順序でデータフレームの列を並べ直し、boxplot()で箱ひげ図を作成します。

  • plt.show()メソッドで図を表示します。

コード例

import pandas as pd
import matplotlib.pyplot as plt

# 図のサイズとレイアウトの設定
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

# サンプルデータフレームの作成
df = pd.DataFrame([
    [23, 'James', 12],
    [39, 'Jimmy', 27],
    [56, 'Jack', 69],
    [60, 'Tom', 96],
    [80, 'Tim', 79]
], columns=['marks', 'names', 'dob'])

# marks と dob でグループ化
g = df.groupby(["marks", "dob"])

df = pd.DataFrame({col: val['dob'] for col, val in g})

# 中央値を計算し、降順に並べ替え
median = df.median()
median.sort_values(ascending=False, inplace=True)

# 中央値の順序で列を並べ替えて箱ひげ図を作成
df = df[median.index]
df.boxplot()

plt.show()

出力結果

上記のコードを実行すると、次のような出力が得られます。各箱ひげ図が中央値の降順に左から右へ並べ替えられていることが確認できます。

pandasで箱ひげ図を中央値の順に並べ替える方法

ポイント解説

  • df.median()は各列の中央値をSeriesとして返します。

  • sort_values(ascending=False, inplace=True)により、中央値を降順でその場(in-place)で並べ替えています。昇順にしたい場合はascending=Trueを指定してください。

  • df = df[median.index]で、並べ替えた中央値のインデックス順に列を再配置することで、箱ひげ図の表示順序が中央値順になります。

  1. Pythonで辞書(dict)を値で並べ替える方法【OrderedDictとsorted()活用】

    Pythonで辞書を値順にソートする基本の考え方 Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書型のサブクラスで、要素が追加された順序を記憶できるのが特徴です。通常の dict もPython 3.7以降は挿入順を保持しますが、明示的に順序を扱いたい場面では OrderedDict が便利です。 OrderedDict をイテレートすると、キーが最初に追加された順序どおりにアイテムが返されます。 OrderedDictの基本的な使い方 >>> from coll

  2. Pythonで辞書のすべての値を取得・出力する方法

    Pythonの辞書(dict)オブジェクトには、すべての値を簡単に取得できるvalues()メソッドが標準で用意されています。このメソッドを呼び出すと、辞書に格納された全ての値が dict_values オブジェクトとして返されます。values()メソッドを使う基本的な方法以下の例では、辞書 D1 のすべての値を values() メソッドで取得しています。戻り値はビューオブジェクトのため、リストとして扱いたい場合は list() 関数で変換すると便利です。>>> D1 = {1:a, 2:b, 3:c} >>> D1.values() dict_valu