基本的な要約統計量の計算#

解析対象となるデータの性質を概観する上で、その要約統計量の計算はデータのプロットと並んで最も基本的な手段の一つです。

本項では、主にpandasを利用してデータの基本的な要約統計量を計算する方法について説明します。

import warnings

warnings.filterwarnings("ignore")

import datetime

import numpy as np
import pandas as pd
FILE_PATH = "../data/2020413_raw.csv"
df = pd.read_csv(FILE_PATH, index_col=0, parse_dates=True, encoding="cp932")
type(df)
pandas.core.frame.DataFrame
df.head()
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器圧力_MODE 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器液面レベル_MODE 気化器温度_PV 気化器ヒータ出口温度_PV ... 反応器流入組成(H2O)_PV 反応器流入組成(HAc)_PV セパレータ蒸気排出量_MV (Fixed) セパレータ蒸気排出量_MODE (Fixed) アブソーバスクラブ流量_MV (Fixed) アブソーバスクラブ流量_MODE (Fixed) アブソーバ還流流量_MV (Fixed) アブソーバ還流流量_MODE (Fixed) 気化器液体流入量_MV (Fixed) 気化器液体流入量_MODE (Fixed)
2020-04-13 00:00:00 127.983294 127.883920 18.728267 AUT 0.700204 0.7 21876.987772 AUT 120.15955841553482 151.274003 ... 0.008524 0.109444 16.1026 AUT 15.1198 AUT 0.766 MAN 2.1924 AUT
2020-04-13 00:00:01 128.262272 127.807691 18.728267 AUT 0.700865 0.7 21876.987772 AUT 120.07257486304935 151.218620 ... 0.008512 0.109441 16.1026 AUT 15.1198 MAN 0.766 MAN 2.1924 AUT
2020-04-13 00:00:02 127.899077 127.991074 19.079324 AUT 0.699740 0.7 21918.359526 AUT 120.30532712904707 151.201067 ... 0.008541 0.109871 16.1026 AUT 15.1198 AUT 0.756 MAN 2.1924 AUT
2020-04-13 00:00:03 127.622218 127.990697 18.772228 AUT 0.699970 0.7 21892.166478 AUT 120.21948819246609 151.220816 ... 0.008573 0.109775 16.1026 AUT 15.1198 AUT 0.746 MAN 2.1924 AUT
2020-04-13 00:00:04 127.577243 127.903788 18.605173 AUT 0.700939 0.7 21885.688813 AUT 120.30226736316207 151.165624 ... 0.008547 0.109868 16.1026 AUT 15.1198 AUT 0.766 MAN 2.1924 AUT

5 rows × 117 columns

df.tail()
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器圧力_MODE 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器液面レベル_MODE 気化器温度_PV 気化器ヒータ出口温度_PV ... 反応器流入組成(H2O)_PV 反応器流入組成(HAc)_PV セパレータ蒸気排出量_MV (Fixed) セパレータ蒸気排出量_MODE (Fixed) アブソーバスクラブ流量_MV (Fixed) アブソーバスクラブ流量_MODE (Fixed) アブソーバ還流流量_MV (Fixed) アブソーバ還流流量_MODE (Fixed) 気化器液体流入量_MV (Fixed) 気化器液体流入量_MODE (Fixed)
2020-04-13 23:59:56 128.403376 127.807067 18.416376 AUT 0.699906 0.7 20626.708116 AUT 120.090742 146.281034 ... 0.008531 0.108748 16.1026 AUT 15.1198 AUT 0.756 MAN 2.1924 AUT
2020-04-13 23:59:57 128.588067 127.767796 18.841614 AUT 0.701491 0.7 20619.575036 AUT 120.108438 146.044755 ... 0.008509 0.108902 16.1026 AUT 15.1198 AUT 0.766 MAN 2.1924 AUT
2020-04-13 23:59:58 127.902731 127.835123 19.183040 AUT 0.700265 0.7 20690.601248 AUT 119.994853 146.002303 ... 0.008557 0.109702 16.1026 AUT 15.1198 AUT 0.756 MAN 2.1924 AUT
2020-04-13 23:59:59 127.481159 127.788436 19.008170 AUT 0.699875 0.7 20679.383806 AUT 120.461519 146.316817 ... 0.008597 0.109983 16.1026 AUT 15.1198 AUT 0.756 MAN 2.1924 AUT
2020-04-14 00:00:00 127.047655 127.883040 18.830251 AUT 0.700232 0.7 20653.282699 AUT 120.220176 146.071783 ... 0.008595 0.110083 16.1026 AUT 15.1198 AUT 0.766 MAN 2.1924 AUT

5 rows × 117 columns

DataFrame.describe() メソッドによる統計量の計算#

DataFrame.describe() メソッドを用いるとデータフレームの各列の基本的な要約統計量を計算することができます。

メソッドの引数を省略した場合、数値型の列のみを対象に統計量が計算されます。特に指定しない場合、数値型の列に対しては以下の統計量が計算されます:

  • count: そのカラムの(欠損値を除く)カウント数。

  • mean: 標本平均。

  • std: 標本標準偏差(ここでは不偏分散の平方根のこと)。

  • min: 最小値

  • 25%: 第一四分位点

  • 50%: 中央値

  • 75%: 第三四分位点。

  • max: 最大値

なお、このメソッドにおいて各分位点は特に指定しない限り線形補間によって計算されます。

これらの統計量は、いずれも各列の欠損値を除いた値に対して計算されます。ここでいう欠損値とは数値型のデータに対しては np.nanのこと、オブジェクト型のデータに対しては None または np.nan のこと、タイムスタンプ型のデータに対しては pd.NaT のことを指します。これ以外の形式で欠損値を含む列についても、その列で欠損値の標識として扱われているオブジェクト(と、必要であれば列の型)を適切に変換することで同様に欠損値を除いた要約統計量を計算できます。

df.describe()  # df.describe(include=['number']) と等価
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器ヒータ出口温度_PV 気化器ヒータ出口温度_SV 気化器ヒータ熱量_MV 反応器出口温度_PV ... 反応器流入組成(CO2)_PV 反応器流入組成(C2H4)_PV 反応器流入組成(C2H6)_PV 反応器流入組成(VAc)_PV 反応器流入組成(H2O)_PV 反応器流入組成(HAc)_PV セパレータ蒸気排出量_MV (Fixed) アブソーバスクラブ流量_MV (Fixed) アブソーバ還流流量_MV (Fixed) 気化器液体流入量_MV (Fixed)
count 86401.000000 86401.000000 86401.000000 86401.000000 86401.0 86401.000000 86401.000000 86401.000000 86401.000000 86401.000000 ... 86401.000000 86401.000000 86401.000000 86401.000000 86401.000000 86401.000000 86401.0000 86401.000000 86401.000000 8.640100e+04
mean 128.003572 128.003523 18.739939 0.699817 0.7 21042.826199 149.394326 149.377512 8469.667170 162.519873 ... 0.007105 0.579199 0.216620 0.001345 0.008527 0.109531 16.1026 15.119812 0.755994 2.192400e+00
std 0.730975 0.528019 0.271741 0.001456 0.0 595.522549 2.627174 2.660024 788.970252 2.607510 ... 0.001029 0.003280 0.002286 0.000123 0.000216 0.000585 0.0000 0.005893 0.015588 4.440918e-16
min 124.867305 126.117504 17.630283 0.691872 0.7 19450.325940 144.164250 144.465541 6939.220644 158.728209 ... 0.005781 0.568222 0.209656 0.001091 0.008062 0.107004 16.1026 14.119800 0.726000 2.192400e+00
25% 127.516310 127.638645 18.556992 0.699350 0.7 20619.961651 147.287142 147.257906 7858.817815 159.244862 ... 0.006156 0.577539 0.215155 0.001267 0.008393 0.109156 16.1026 15.119800 0.746000 2.192400e+00
50% 128.019870 128.032549 18.740014 0.699983 0.7 20782.977708 149.490134 149.465516 8498.222542 164.057124 ... 0.006931 0.579599 0.216493 0.001351 0.008490 0.109523 16.1026 15.119800 0.756000 2.192400e+00
75% 128.514749 128.406929 18.923368 0.700589 0.7 21668.395427 151.684289 151.290439 9161.621886 164.220936 ... 0.007799 0.581076 0.217945 0.001442 0.008639 0.109894 16.1026 15.119800 0.766000 2.192400e+00
max 130.558771 129.371837 19.971127 0.705129 0.7 22159.410914 154.324801 154.045536 9959.895900 169.246278 ... 0.011078 0.590416 0.223473 0.001596 0.009316 0.112957 16.1026 16.119800 0.786000 2.192400e+00

8 rows × 89 columns

今回のデータの場合、例えば 気化器液面レベル_SV 列は最小値と最大値が同じであることから常に一定の値を取っていることが分かります。また、多くの列は最小値が正数であることから少なくとも非負の値を取る列であろうことが推測されます。このほかにも、平均値と中央値の比較、標本標準偏差と四分位範囲との比較などから各列の経験分布の概形をある程度推測することができます。

オブジェクト型の列については、キーワード引数 include に要約統計量を計算する列の型を指定することで要約統計量を計算することができます。Pandasはカテゴリ型の変数を専用の型( pd.CategoricalDtype )で扱うこともできますが、データをCSVファイルから読み込んだ際は特に指定しない限りオブジェクト型( np.object )の列として認識されています。(カテゴリ型を含む)オブジェクト型の列に対しては以下の統計量が計算されます:

  • count: そのカラムの(欠損値を除く)カウント数。

  • unique: そのカラムの(欠損値を除く)カテゴリ数。

  • top: 最頻値

  • freq: 最頻値の頻度。

# df.describe(include=['category'])
df.describe(include=["object"])
気化器圧力_MODE 気化器液面レベル_MODE 気化器温度_PV 気化器ヒータ熱量_MODE 反応器外殻温度_MODE 熱交換器出口温度(リサイクルガス)_PV 熱交換器バルブ開度_MODE セパレータ液体排出量_MODE セパレータ外殻温度_MODE コンプレッサーヒーター熱量_MODE ... 蒸留塔リボイラー熱量_MODE 原材料HAc供給量_MODE 蒸留塔還流流量_MODE CO2除去装置流入流量_MODE 排出ガス流量_MODE 原材料O2供給量_MODE セパレータ蒸気排出量_MODE (Fixed) アブソーバスクラブ流量_MODE (Fixed) アブソーバ還流流量_MODE (Fixed) 気化器液体流入量_MODE (Fixed)
count 86401 86401 86401 86401 86401 86401 86401 86401 86401 86401 ... 86401 86401 86401 86401 86401 86401 86401 86401 86401 86401
unique 1 1 86391 2 2 86389 1 1 1 2 ... 1 1 1 1 1 2 1 2 1 1
top AUT AUT None AUT AUT None AUT AUT AUT AUT ... AUT AUT AUT AUT AUT AUT AUT AUT MAN AUT
freq 86401 86401 11 86346 86398 13 86401 86401 86401 86315 ... 86401 86401 86401 86401 86401 86245 86401 86394 86401 86401

4 rows × 28 columns

今回のデータの場合、例えば 気化器温度_PV はカウント数とカテゴリ数がほぼ同じであること、最頻値の文字列 'None' が値の欠損を示す表現として解釈できることから、本来は数値型であった列に欠損値を示す文字列が混入したことで列全体がオブジェクト型として認識されていることが推測されます。

タイムスタンプ型の列についても、同様にキーワード引数 include を指定することで要約統計量を計算することができます。(カテゴリ型を含む)タイムスタンプ型の列に対しては以下の統計量が計算されます:

  • count: そのカラムの(欠損値を除く)カウント数。

  • unique: そのカラムの(欠損値を除く)カテゴリ数。

  • top: 最頻値

  • freq: 最頻値の頻度。

  • first: 最初の時刻。

  • last: 最後の時刻。

try:
    df.describe(include=["datetime"])
except Exception as e:
    print(f"{type(e)}: {e}")
<class 'ValueError'>: No objects to concatenate

今回のデータにはタイムスタンプ型の列が存在しないので、インデックスを Series 型に変換した上で Series.describe() メソッドを適用します。 Series.describe() メソッドの挙動は DataFrame.describe() メソッドと同等です。

df.index.to_series().describe()
count                   86401
unique                  86401
top       2020-04-13 21:42:30
freq                        1
first     2020-04-13 00:00:00
last      2020-04-14 00:00:00
dtype: object

今回のインデックスの場合、カテゴリ数がカウント数と一致することから時刻の重複がないことがわかります。また、最初と最後の時刻と df.head()df.tail() で表示されているインデックスを合わせて考えると、データが時刻の昇順に並んでいることも推測されます。

なお、引数 include='all' を指定することで、型に関係なくすべての列の要約統計量を同時に計算・表示することもできます。

df.describe(include="all")
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器圧力_MODE 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器液面レベル_MODE 気化器温度_PV 気化器ヒータ出口温度_PV ... 反応器流入組成(H2O)_PV 反応器流入組成(HAc)_PV セパレータ蒸気排出量_MV (Fixed) セパレータ蒸気排出量_MODE (Fixed) アブソーバスクラブ流量_MV (Fixed) アブソーバスクラブ流量_MODE (Fixed) アブソーバ還流流量_MV (Fixed) アブソーバ還流流量_MODE (Fixed) 気化器液体流入量_MV (Fixed) 気化器液体流入量_MODE (Fixed)
count 86401.000000 86401.000000 86401.000000 86401 86401.000000 86401.0 86401.000000 86401 86401 86401.000000 ... 86401.000000 86401.000000 86401.0000 86401 86401.000000 86401 86401.000000 86401 8.640100e+04 86401
unique NaN NaN NaN 1 NaN NaN NaN 1 86391 NaN ... NaN NaN NaN 1 NaN 2 NaN 1 NaN 1
top NaN NaN NaN AUT NaN NaN NaN AUT None NaN ... NaN NaN NaN AUT NaN AUT NaN MAN NaN AUT
freq NaN NaN NaN 86401 NaN NaN NaN 86401 11 NaN ... NaN NaN NaN 86401 NaN 86394 NaN 86401 NaN 86401
mean 128.003572 128.003523 18.739939 NaN 0.699817 0.7 21042.826199 NaN NaN 149.394326 ... 0.008527 0.109531 16.1026 NaN 15.119812 NaN 0.755994 NaN 2.192400e+00 NaN
std 0.730975 0.528019 0.271741 NaN 0.001456 0.0 595.522549 NaN NaN 2.627174 ... 0.000216 0.000585 0.0000 NaN 0.005893 NaN 0.015588 NaN 4.440918e-16 NaN
min 124.867305 126.117504 17.630283 NaN 0.691872 0.7 19450.325940 NaN NaN 144.164250 ... 0.008062 0.107004 16.1026 NaN 14.119800 NaN 0.726000 NaN 2.192400e+00 NaN
25% 127.516310 127.638645 18.556992 NaN 0.699350 0.7 20619.961651 NaN NaN 147.287142 ... 0.008393 0.109156 16.1026 NaN 15.119800 NaN 0.746000 NaN 2.192400e+00 NaN
50% 128.019870 128.032549 18.740014 NaN 0.699983 0.7 20782.977708 NaN NaN 149.490134 ... 0.008490 0.109523 16.1026 NaN 15.119800 NaN 0.756000 NaN 2.192400e+00 NaN
75% 128.514749 128.406929 18.923368 NaN 0.700589 0.7 21668.395427 NaN NaN 151.684289 ... 0.008639 0.109894 16.1026 NaN 15.119800 NaN 0.766000 NaN 2.192400e+00 NaN
max 130.558771 129.371837 19.971127 NaN 0.705129 0.7 22159.410914 NaN NaN 154.324801 ... 0.009316 0.112957 16.1026 NaN 16.119800 NaN 0.786000 NaN 2.192400e+00 NaN

11 rows × 117 columns

DataFrame.describe() メソッドの利用#

特定の期間に限って要約統計量を計算したい場合は次のようにもできます。

threshold = datetime.datetime(2020, 4, 13, 12, 0)
df[df.index < threshold].describe()

# 今回はインデックスが昇順なので、単に df[:'2020-04-13 12:00:00'].describe() でも可
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器ヒータ出口温度_PV 気化器ヒータ出口温度_SV 気化器ヒータ熱量_MV 反応器出口温度_PV ... 反応器流入組成(CO2)_PV 反応器流入組成(C2H4)_PV 反応器流入組成(C2H6)_PV 反応器流入組成(VAc)_PV 反応器流入組成(H2O)_PV 反応器流入組成(HAc)_PV セパレータ蒸気排出量_MV (Fixed) アブソーバスクラブ流量_MV (Fixed) アブソーバ還流流量_MV (Fixed) 気化器液体流入量_MV (Fixed)
count 43200.000000 43200.000000 43200.000000 43200.000000 4.320000e+04 43200.000000 43200.000000 43200.000000 43200.000000 43200.000000 ... 43200.000000 43200.000000 43200.000000 43200.000000 43200.000000 43200.000000 43200.0000 43200.000000 43200.000000 4.320000e+04
mean 127.959910 127.959824 18.743200 0.699626 7.000000e-01 21441.040805 151.257481 151.237036 9022.133655 160.574195 ... 0.006640 0.579762 0.215768 0.001420 0.008655 0.109543 16.1026 15.119823 0.756016 2.192400e+00
std 0.758294 0.572926 0.267287 0.001481 1.110236e-16 567.991964 1.723748 1.794743 533.500476 2.209347 ... 0.000983 0.003672 0.002390 0.000072 0.000217 0.000595 0.0000 0.004811 0.015582 4.440943e-16
min 124.867305 126.117504 17.697018 0.691872 7.000000e-01 20232.756055 148.074985 148.191664 8060.777576 158.728209 ... 0.005781 0.568222 0.209656 0.001283 0.008227 0.107192 16.1026 15.119800 0.726000 2.192400e+00
25% 127.459848 127.583942 18.562797 0.699232 7.000000e-01 20691.612838 149.991740 149.932232 8636.508611 159.123425 ... 0.005998 0.578177 0.214200 0.001355 0.008522 0.109151 16.1026 15.119800 0.746000 2.192400e+00
50% 127.989612 128.017179 18.742928 0.699906 7.000000e-01 21668.399613 151.684362 151.290439 9161.638614 159.244856 ... 0.006156 0.579952 0.215559 0.001420 0.008639 0.109536 16.1026 15.119800 0.756000 2.192400e+00
75% 128.489170 128.389431 18.923812 0.700494 7.000000e-01 21872.748154 152.725282 152.759961 9473.292252 163.713795 ... 0.007520 0.581653 0.217000 0.001467 0.008740 0.109915 16.1026 15.119800 0.766000 2.192400e+00
max 130.434652 129.300240 19.837166 0.703874 7.000000e-01 22159.410914 154.324801 154.045536 9959.895900 164.601923 ... 0.009490 0.590416 0.223025 0.001596 0.009316 0.112774 16.1026 16.119800 0.786000 2.192400e+00

8 rows × 89 columns

また、 DataFrame.describe() の返り値は DataFrame 型になっているため、その差を取れば期間ごとのデータの傾向の違いを大まかに把握することも可能です。ただし、この差に統計上の意味があるかは適切な検定等を通じて確認されなければなりません。

# threshold = datetime.datetime(2020, 4, 13, 12, 0)
df[df.index >= threshold].describe() - df[df.index < threshold].describe()

# 同じく df['2020-04-13 12:00:00':].describe() - df[:'2020-04-13 12:00:00'].describe() でも可
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器ヒータ出口温度_PV 気化器ヒータ出口温度_SV 気化器ヒータ熱量_MV 反応器出口温度_PV ... 反応器流入組成(CO2)_PV 反応器流入組成(C2H4)_PV 反応器流入組成(C2H6)_PV 反応器流入組成(VAc)_PV 反応器流入組成(H2O)_PV 反応器流入組成(HAc)_PV セパレータ蒸気排出量_MV (Fixed) アブソーバスクラブ流量_MV (Fixed) アブソーバ還流流量_MV (Fixed) 気化器液体流入量_MV (Fixed)
count 1.000000 1.000000 1.000000 1.000000 1.000000e+00 1.000000 1.000000 1.000000 1.000000 1.000000 ... 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.0 1.000000 1.000000 1.000000e+00
mean 0.087322 0.087397 -0.006522 0.000382 0.000000e+00 -796.419995 -3.726268 -3.719005 -1104.920180 3.891311 ... 0.000930 -0.001126 0.001704 -0.000150 -0.000255 -0.000024 0.0 -0.000023 -0.000044 0.000000e+00
std -0.058408 -0.098004 0.008801 -0.000076 -2.974526e-26 -304.286189 0.248620 0.208965 58.023473 -1.138888 ... -0.000134 -0.000953 -0.000576 0.000045 -0.000101 -0.000021 0.0 0.001993 0.000014 -1.189810e-25
min 0.411266 0.405402 -0.066735 0.000634 0.000000e+00 -782.430115 -3.910735 -3.726123 -1121.556932 4.930617 ... 0.000776 0.000148 0.003155 -0.000192 -0.000164 -0.000188 0.0 -1.000000 0.000000 0.000000e+00
25% 0.108119 0.086978 -0.011580 0.000225 0.000000e+00 -92.209416 -3.947617 -3.806326 -1159.573768 4.961360 ... 0.000918 -0.001301 0.001947 -0.000204 -0.000199 0.000008 0.0 0.000000 0.000000 0.000000e+00
50% 0.059805 0.032710 -0.005683 0.000155 0.000000e+00 -974.280433 -4.397220 -4.032533 -1302.820799 4.940011 ... 0.001373 -0.000738 0.001627 -0.000153 -0.000205 -0.000025 0.0 0.000000 0.000000 0.000000e+00
75% 0.046686 0.035361 -0.001037 0.000205 0.000000e+00 -1083.992178 -3.303166 -3.453222 -992.645691 0.584771 ... 0.000362 -0.000979 0.001579 -0.000124 -0.000256 -0.000044 0.0 0.000000 0.000000 0.000000e+00
max 0.124119 0.071597 0.133961 0.001255 0.000000e+00 -1072.275500 -2.870945 -2.817416 -894.396284 4.644355 ... 0.001588 -0.005467 0.000447 -0.000096 -0.000613 0.000182 0.0 0.000000 0.000000 0.000000e+00

8 rows × 89 columns

その他の DataFrame 型のメソッドの利用#

DataFrame.describe() は主要な統計量を一括して計算してくれるので便利ではありますが、特定の統計量にしか興味がない場合や、同メソッドで計算されない統計量に興味がある場合は個別のメソッドを叩くことになります。ここではそのうち一部を紹介します。

平均#

各カラムの平均mean() で計算できます。通常の標本平均が計算されます。

df.mean()
気化器圧力_PV                  128.003572
気化器圧力_SV                  128.003523
気化器圧力_MV                   18.739939
気化器液面レベル_PV                 0.699817
気化器液面レベル_SV                 0.700000
                             ...    
反応器流入組成(HAc)_PV             0.109531
セパレータ蒸気排出量_MV (Fixed)      16.102600
アブソーバスクラブ流量_MV (Fixed)     15.119812
アブソーバ還流流量_MV (Fixed)        0.755994
気化器液体流入量_MV (Fixed)         2.192400
Length: 89, dtype: float64

分散#

各カラムの分散var() で計算できます。特に指定しなければ不偏分散が計算されます。標本分散を計算する場合は引数 ddof=0 を指定します。

df.var()
気化器圧力_PV                  5.343248e-01
気化器圧力_SV                  2.788037e-01
気化器圧力_MV                  7.384343e-02
気化器液面レベル_PV               2.120144e-06
気化器液面レベル_SV               0.000000e+00
                              ...     
反応器流入組成(HAc)_PV           3.420014e-07
セパレータ蒸気排出量_MV (Fixed)     0.000000e+00
アブソーバスクラブ流量_MV (Fixed)    3.472209e-05
アブソーバ還流流量_MV (Fixed)      2.429965e-04
気化器液体流入量_MV (Fixed)       1.972175e-31
Length: 89, dtype: float64

標準偏差#

各カラムの標準偏差std() で計算できます。特に指定しなければ標本標準偏差(不偏分散の平方根)が計算されます。未修正の標準偏差を計算する場合は引数 ddof=0 を指定します。

df.std()
気化器圧力_PV                  7.309752e-01
気化器圧力_SV                  5.280187e-01
気化器圧力_MV                  2.717415e-01
気化器液面レベル_PV               1.456072e-03
気化器液面レベル_SV               0.000000e+00
                              ...     
反応器流入組成(HAc)_PV           5.848089e-04
セパレータ蒸気排出量_MV (Fixed)     0.000000e+00
アブソーバスクラブ流量_MV (Fixed)    5.892545e-03
アブソーバ還流流量_MV (Fixed)      1.558834e-02
気化器液体流入量_MV (Fixed)       4.440918e-16
Length: 89, dtype: float64

歪度#

各カラムの歪度skew() で計算できます。中心化モーメントの不偏推定量から計算されます。

df.skew()
気化器圧力_PV                  -0.143346
気化器圧力_SV                  -0.368951
気化器圧力_MV                   0.001496
気化器液面レベル_PV               -1.579630
気化器液面レベル_SV                0.000000
                            ...    
反応器流入組成(HAc)_PV            0.253634
セパレータ蒸気排出量_MV (Fixed)      0.000000
アブソーバスクラブ流量_MV (Fixed)    56.564287
アブソーバ還流流量_MV (Fixed)       0.004684
気化器液体流入量_MV (Fixed)        0.000000
Length: 89, dtype: float64

尖度#

各カラムの尖度kurt() で計算できます。中心化モーメントの不偏推定量から計算されます。いわゆる過剰尖度(正規分布で0になるよう調整された尖度)が計算されます。

df.kurt()
気化器圧力_PV                     -0.066694
気化器圧力_SV                      0.016573
気化器圧力_MV                     -0.021632
気化器液面レベル_PV                   4.807546
気化器液面レベル_SV                   0.000000
                              ...     
反応器流入組成(HAc)_PV               1.058583
セパレータ蒸気排出量_MV (Fixed)         0.000000
アブソーバスクラブ流量_MV (Fixed)    28798.777751
アブソーバ還流流量_MV (Fixed)         -0.991358
気化器液体流入量_MV (Fixed)           0.000000
Length: 89, dtype: float64

最小値#

各カラムの最小値min() で計算できます。オブジェクト型の列についても辞書順の最小値を返すので注意が必要です。

df.min()
気化器圧力_PV                    124.867305
気化器圧力_SV                    126.117504
気化器圧力_MV                     17.630283
気化器圧力_MODE                         AUT
気化器液面レベル_PV                   0.691872
                               ...    
アブソーバスクラブ流量_MODE (Fixed)           AUT
アブソーバ還流流量_MV (Fixed)             0.726
アブソーバ還流流量_MODE (Fixed)             MAN
気化器液体流入量_MV (Fixed)             2.1924
気化器液体流入量_MODE (Fixed)              AUT
Length: 115, dtype: object

最大値#

各カラムの最大値max() で計算できます。オブジェクト型の列についても辞書順の最大値を返すので注意が必要です。

df.max()
気化器圧力_PV                    130.558771
気化器圧力_SV                    129.371837
気化器圧力_MV                     19.971127
気化器圧力_MODE                         AUT
気化器液面レベル_PV                   0.705129
                               ...    
アブソーバスクラブ流量_MODE (Fixed)           MAN
アブソーバ還流流量_MV (Fixed)             0.786
アブソーバ還流流量_MODE (Fixed)             MAN
気化器液体流入量_MV (Fixed)             2.1924
気化器液体流入量_MODE (Fixed)              AUT
Length: 115, dtype: object

中央値#

各カラムの中央値median() で計算できます。

df.median()
気化器圧力_PV                  128.019870
気化器圧力_SV                  128.032549
気化器圧力_MV                   18.740014
気化器液面レベル_PV                 0.699983
気化器液面レベル_SV                 0.700000
                             ...    
反応器流入組成(HAc)_PV             0.109523
セパレータ蒸気排出量_MV (Fixed)      16.102600
アブソーバスクラブ流量_MV (Fixed)     15.119800
アブソーバ還流流量_MV (Fixed)        0.756000
気化器液体流入量_MV (Fixed)         2.192400
Length: 89, dtype: float64

分位点#

各カラムのq-分位点quantile() で計算できます。特に指定しなければ線形補間によって計算されます。

df.quantile(q=0.05)
気化器圧力_PV                  126.772047
気化器圧力_SV                  127.119654
気化器圧力_MV                   18.292463
気化器液面レベル_PV                 0.696865
気化器液面レベル_SV                 0.700000
                             ...    
反応器流入組成(HAc)_PV             0.108603
セパレータ蒸気排出量_MV (Fixed)      16.102600
アブソーバスクラブ流量_MV (Fixed)     15.119800
アブソーバ還流流量_MV (Fixed)        0.736000
気化器液体流入量_MV (Fixed)         2.192400
Name: 0.05, Length: 89, dtype: float64

最頻値#

各カラムの最頻値mode() で計算できます。 DataFrame.describe() の表示と異なり、すべての最頻値が表示されます。

# df.mode()
df.mode().head()
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器圧力_MODE 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器液面レベル_MODE 気化器温度_PV 気化器ヒータ出口温度_PV ... 反応器流入組成(H2O)_PV 反応器流入組成(HAc)_PV セパレータ蒸気排出量_MV (Fixed) セパレータ蒸気排出量_MODE (Fixed) アブソーバスクラブ流量_MV (Fixed) アブソーバスクラブ流量_MODE (Fixed) アブソーバ還流流量_MV (Fixed) アブソーバ還流流量_MODE (Fixed) 気化器液体流入量_MV (Fixed) 気化器液体流入量_MODE (Fixed)
0 124.867305 126.117504 18.728267 AUT 0.691872 0.7 21876.987772 AUT None 144.164250 ... 0.008062 0.107004 16.1026 AUT 15.1198 AUT 0.746 MAN 2.1924 AUT
1 124.936512 126.134565 NaN NaN 0.692127 NaN NaN NaN NaN 144.202095 ... 0.008074 0.107038 NaN NaN NaN NaN NaN NaN NaN NaN
2 124.950716 126.141368 NaN NaN 0.692161 NaN NaN NaN NaN 144.216889 ... 0.008077 0.107047 NaN NaN NaN NaN NaN NaN NaN NaN
3 125.044889 126.143194 NaN NaN 0.692279 NaN NaN NaN NaN 144.220617 ... 0.008079 0.107051 NaN NaN NaN NaN NaN NaN NaN NaN
4 125.086386 126.151273 NaN NaN 0.692299 NaN NaN NaN NaN 144.224407 ... 0.008080 0.107120 NaN NaN NaN NaN NaN NaN NaN NaN

5 rows × 117 columns

共分散#

各カラム間の共分散cov() で計算できます。標本共分散行列(母共分散行列の不偏推定量で、 (標本数 - 1) により除されたもの)が計算されます。

# df.cov()
df.iloc[:, :10].cov()  # 簡単のため最初の10個の特徴のみ計算
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器ヒータ出口温度_PV
気化器圧力_PV 0.534325 0.270746 -0.022017 0.000481 0.0 69.861730 -0.399910
気化器圧力_SV 0.270746 0.278804 0.000335 0.000446 0.0 70.092373 -0.401320
気化器圧力_MV -0.022017 0.000335 0.073843 0.000009 0.0 5.381979 0.003891
気化器液面レベル_PV 0.000481 0.000446 0.000009 0.000002 0.0 0.216621 -0.000636
気化器液面レベル_SV 0.000000 0.000000 0.000000 0.000000 0.0 0.000000 0.000000
気化器液面レベル_MV 69.861730 70.092373 5.381979 0.216621 0.0 354647.106300 813.532827
気化器ヒータ出口温度_PV -0.399910 -0.401320 0.003891 -0.000636 0.0 813.532827 6.902044

相関係数#

各カラム間の相関係数corr() で計算できます。特に指定しなければPearsonの積率相関係数が計算されます。

# df.corr()  # df.corr(method='pearson') と等価
df.iloc[:, :10].corr()  # 簡単のため最初の10個の特徴のみ計算
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器ヒータ出口温度_PV
気化器圧力_PV 1.000000 0.701471 -0.110841 0.451896 NaN 0.160486 -0.208243
気化器圧力_SV 0.701471 1.000000 0.002331 0.580189 NaN 0.222907 -0.289303
気化器圧力_MV -0.110841 0.002331 1.000000 0.021605 NaN 0.033257 0.005450
気化器液面レベル_PV 0.451896 0.580189 0.021605 1.000000 NaN 0.249816 -0.166304
気化器液面レベル_SV NaN NaN NaN NaN NaN NaN NaN
気化器液面レベル_MV 0.160486 0.222907 0.033257 0.249816 NaN 1.000000 0.519982
気化器ヒータ出口温度_PV -0.208243 -0.289303 0.005450 -0.166304 NaN 0.519982 1.000000

SpearmanやKendallの順位相関係数を計算したい場合は、引数 method='spearman'method='kendall' を指定します。

# df.corr(method='spearman')
df.iloc[:, :10].corr(method="spearman")  # 簡単のため最初の10個の特徴のみ計算
気化器圧力_PV 気化器圧力_SV 気化器圧力_MV 気化器液面レベル_PV 気化器液面レベル_SV 気化器液面レベル_MV 気化器ヒータ出口温度_PV
気化器圧力_PV 1.000000 0.684959 -0.107190 0.405658 NaN 0.224249 -0.195055
気化器圧力_SV 0.684959 1.000000 -0.001790 0.496931 NaN 0.311107 -0.261607
気化器圧力_MV -0.107190 -0.001790 1.000000 0.006398 NaN 0.033827 0.004420
気化器液面レベル_PV 0.405658 0.496931 0.006398 1.000000 NaN 0.226212 -0.115397
気化器液面レベル_SV NaN NaN NaN NaN NaN NaN NaN
気化器液面レベル_MV 0.224249 0.311107 0.033827 0.226212 NaN 1.000000 0.365463
気化器ヒータ出口温度_PV -0.195055 -0.261607 0.004420 -0.115397 NaN 0.365463 1.000000

小括#

Pandasを利用してデータの基本的な要約統計量を計算する方法について概説しました。

本項で紹介した要約統計量はいずれもインデックスの置換に対して不変なものであり、時系列データの記述には十分でありません。しかし、解析の初期段階でデータの大まかな傾向を把握したい場合には参考にできますし、紹介した個々のメソッドは時系列性を考慮した各種統計量の計算にも利用することができます。