def test_count(data): xpd = PanelData(data.x) xpd.drop(xpd.isnull) entity_mean = xpd.count("entity") expected = xpd.dataframe.groupby(level=0).count() expected = expected.loc[xpd.entities] expected.columns.name = None expected = expected.astype(np.int64) assert_frame_equal(entity_mean, expected) time_mean = xpd.count("time") expected = xpd.dataframe.groupby(level=1).count() expected = expected.loc[xpd.time] expected.columns.name = None expected = expected.astype(np.int64) assert_frame_equal(time_mean, expected)
$$ dfp.shape * 変数の数:4(列にある変数) * 期間数:3(年) * 観察単位の数:3(国) --- データセットには欠損値がある場合がある。観察単位数が$N$で期間数が$T$の場合,観測値の数は$n=N\times T$となるが,次の2つを区別する。 * balanced panel data:$n=N\times T$(観察単位に対して全ての期間の全ての変数に欠損値がない) * unbalanced panel data:$n<N\times T$(欠損値がある) balanced か unbalancedかは以下のコードで確認できる。まず,メソッド`count()`を使う。 dfp.count() 観察単位(国)に対して,それぞれの変数に欠損値ではない観測値がいくつ存在するかを`DataFrame`として返す。期間数は3なので,3より低い数字があれば欠損値の存在を表す。例えば,Australiaの`inv`には欠損値がある。 次のコードは,欠損値がある場合には`True`を返す。ここで`nobs`は期間数(この場合3)を返す属性である。 dfp.count() == dfp.nobs `all()`は,列に対して全ての要素が`True`の場合のみ`True`を返すので,これを使い確認できる。 (dfp.count() == dfp.nobs).all() `( )`はその中を先に評価する,という意味(数学と同じ)。変数が多い場合,`all()`を2回使うと全ての変数に対して評価するので便利である。 (dfp.count() == dfp.nobs).all().all()