基本的な要約統計量の計算#
解析対象となるデータの性質を概観する上で、その要約統計量の計算はデータのプロットと並んで最も基本的な手段の一つです。
本項では、主に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を利用してデータの基本的な要約統計量を計算する方法について概説しました。
本項で紹介した要約統計量はいずれもインデックスの置換に対して不変なものであり、時系列データの記述には十分でありません。しかし、解析の初期段階でデータの大まかな傾向を把握したい場合には参考にできますし、紹介した個々のメソッドは時系列性を考慮した各種統計量の計算にも利用することができます。