データの集約と要約統計量
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分位数です。
コメント
【ChatGPT講義】pandasのdescribeメソッド
ユーザー: pandasのdescribeメソッドについて教えてください。
AI:はい、もちろんです!pandasのdescribeメソッドは、データフレームやシリーズの要約統計情報を提供するための便利なメソッドです。データの基本的な統計的な特徴を一括で取得することができます。
ユーザー:それは便利そうですね。どのように使用すればいいですか?
AI:describeメソッドは、データフレームやシリーズオブジェクトに対して直接呼び出すことができます。例えば、df.describe()とすると、データフレームdfの各数値列に対して統計情報が計算されます。
ユーザー: 統計情報とは具体的に何が含まれるのでしょうか?
AI: describeメソッドは、データの中央値、平均値、標準偏差、最小値、最大値などの統計情報を提供します。また、25パーセンタイル、50パーセンタイル(中央値)、75パーセンタイルなどのパーセンタイル情報も含まれます。
ユーザー:なるほど、具体的な使い方を教えてください。
AI:もちろんです!以下の例を使って具体的な使い方を示します。まず、以下のようなデータフレームdfがあるとします。
このデータフレームに対して、df.describe()を実行すると、次のような結果が得られます。
この結果から、各列のカウント数、平均値、標準偏差、最小値、最大値、パーセンタイルなどがわかります。