【pandas】要約統計量

当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

 

データの集約と要約統計量

pandas の Series や DataFrame には列について合計や平均、標準偏差などを求める 集約メソッド が用意されています。以下のコードで太陽系の惑星一覧表を取得して DataFrame を作成します (planets.csv は Wikipedia から得たデータを元に作成しました)。

# PANDAS_AGGREGATION_METHODS

# In[1]

import numpy as np
import pandas as pd

# ファイルのパス
u = "https://python.atelierkobato.com/wp-content/uploads/2019/07/planets.csv"

# CSVファイルを読み込んでデータフレームに変換
# 最初の行を列ラベル、左の列を行ラベルに設定
planets = pd.read_csv(u, encoding="SHIFT-JIS",
                      header=0, index_col="惑星")

print(planets)

出力する表はこのサイトのページ幅に収まらないので、実行結果の掲載は割愛します。drop()メソッドを使って、いくつかの項目を削除しておきます。

# In[2]

# 削除する項目のリスト
drop_list = ["軌道傾斜角", "軌道離心率",
             "表面重力", "自転周期", "衛星数"]

# リストにある項目をすべて削除
planets = planets.drop(drop_list, axis=1)

print(planets)
'''
         半径    質量  軌道長半径  公転周期
惑星
水星     2440    0.06    0.387       0.241
金星     6052    0.82    0.723       0.615
地球     6378    1.00    1.000       1.000
火星     3396    0.11    1.524       1.881
木星    71492  318.26    5.204      11.862
土星    60268   95.14    9.582      29.457
天王星  25559   14.54   19.201      84.011
海王星  24764   17.09   30.047     164.790
'''

これで準備が整いました。いくつかの集約メソッドを試してみましょう。
たとえば、mean()メソッドは列ごとに平均値を計算します。

# In[3]

# 列ごとに平均値を計算
p_mean = planets.mean()

print(p_mean)
# 半径       25043.625000
# 質量          55.877500
# 軌道長半径     8.458500
# 公転周期      36.732125
# dtype: float64

min()メソッドは列ごとに最小値を抽出します。

# In[4]

# 列ごとに最小値を抽出
p_min = planets.min()

print(p_min)
# 半径        2440
# 質量        0.06
# 軌道長半径  0.387
# 公転周期    0.241
# dtype: object

cumsum()メソッドは列ごとに累積和を計算します。これによって、内惑星 (水星、金星、地球、火星) の質量の和などを知ることができます。

# In[5]

# 列ごとに累積和を計算
p_cs = planets.cumsum()

print(p_cs)
'''
          半径      質量  軌道長半径  公転周期
惑星                                    
水星      2440.0    0.06   0.387       0.241
金星      8492.0    0.88   1.110       0.856
地球     14870.0    1.88   2.110       1.856
火星     18266.0    1.99   3.634       3.737
木星     89758.0  320.25   8.838      15.599
土星    150026.0  415.39  18.420      45.056
天王星  175585.0  429.93  37.621     129.067
海王星  200349.0  447.02  67.668     293.857
'''

idxmax()メソッドは列ごとに最大値のインデクス (行ラベル) を取得します。
これを使って、最大質量をもつ惑星や公転周期が最も長い惑星などを検索できます。

# In[6]

# 最大値の行ラベルを参照
p_imax = planets.idxmax()

print(p_imax)
# 半径        木星
# 質量        木星
# 軌道長半径  海王星
# 公転周期    海王星
# dtype: object

pandas の代表的な集約メソッドをまとめておきます。

集約メソッド 説明
sum() 総和
cumsum() 累積和
min() 最小値
max() 最大値
idxmin() 最小値のラベル
idxmax() 最大値のラベル
mean() 平均値
median() 中央値
std() 標準偏差
var() 分散
mad() 平均絶対偏差
diff() 差分

pandas.DataFrame.describe

DataFrame の describe() メソッドを使うと、列ごとにデータ数 (count), 平均値 (mean), 標準偏差 (std), 最小値 (min), 最大値 (max) などの統計データをまとめて取得できます。

# In[7]

# すべての項目について要約統計量を取得
p_dsb = planets.describe()

print(p_dsb)
'''
         半径        質量        軌道長半径   公転周期
count      8.000000    8.000000   8.000000    8.000000
mean   25043.625000   55.877500   8.458500   36.732125
std    26958.123196  110.755751  10.836593   59.079845
min     2440.000000    0.060000   0.387000    0.241000
25%     5388.000000    0.642500   0.930750    0.903750
50%    15571.000000    7.770000   3.364000    6.871500
75%    34236.250000   36.602500  11.986750   43.095500
max    71492.000000  318.260000  30.047000  164.790000
'''

50% は中央値 (median), 25% と 75% はそれぞれ 1/4分位数、3/4分位数です。

 

コメント

  1. あとりえこばと より:

    【ChatGPT講義】pandasのdescribeメソッド

    ユーザー: pandasのdescribeメソッドについて教えてください。

    AI:はい、もちろんです!pandasのdescribeメソッドは、データフレームやシリーズの要約統計情報を提供するための便利なメソッドです。データの基本的な統計的な特徴を一括で取得することができます。

    ユーザー:それは便利そうですね。どのように使用すればいいですか?

    AI:describeメソッドは、データフレームやシリーズオブジェクトに対して直接呼び出すことができます。例えば、df.describe()とすると、データフレームdfの各数値列に対して統計情報が計算されます。

    ユーザー: 統計情報とは具体的に何が含まれるのでしょうか?

    AI: describeメソッドは、データの中央値、平均値、標準偏差、最小値、最大値などの統計情報を提供します。また、25パーセンタイル、50パーセンタイル(中央値)、75パーセンタイルなどのパーセンタイル情報も含まれます。

    ユーザー:なるほど、具体的な使い方を教えてください。

    AI:もちろんです!以下の例を使って具体的な使い方を示します。まず、以下のようなデータフレームdfがあるとします。

       A  B  C
    0  1  2  3
    1  4  5  6
    2  7  8  9

     
    このデータフレームに対して、df.describe()を実行すると、次のような結果が得られます。

                 A        B        C
    count  3.000000  3.00000  3.00000
    mean   4.000000  5.00000  6.00000
    std    3.605551  3.60555  3.60555
    min    1.000000  2.00000  3.00000
    25%    2.500000  3.50000  4.50000
    50%    4.000000  5.00000  6.00000
    75%    5.500000  6.50000  7.50000
    max    7.000000  8.00000  9.00000


    この結果から、各列のカウント数、平均値、標準偏差、最小値、最大値、パーセンタイルなどがわかります。