エビデンスで教育を考えた

頭が良くなる科学論文を紹介していきます。お勧め商品は楽天ルームで!https://room.rakuten.co.jp/room_12b7a40f6d/items

データの欠損にはどう対処すれば良いのか〜データサイエンスの基本〜

f:id:mathlikeB:20201121151337j:plain

 データをみる上で怖いもの。

それは、、、、欠損です!


というわけで今回は欠損について思うことをメモします。プログラミングの話なのでご了承ください。

データの欠損とは

データの欠損には大きく2つあります。それは一部が欠けているものとレコードそのものが欠けているものです。

レコードの一部が欠けている場合は、例えばこんな感じ。

  id name  price        date
0   1         100  2020-11-01
1   2    b    110  2020-11-02
2   3    c    120  2020-11-03
3   4    b    130  2020-11-04
4   5         140  2020-11-05
5   6    b    150  2020-11-06
6   7    d    160  2020-11-07
7   8    b    170  2020-11-08


これは1行目と5行目のnameが欠けています。しかし、レコードそのものが欠けているわけではないですよね。この場合は結構話が早くて、結論はテーブル名.isnull().any(axis=0)で判定可能です。



問題は次の場合。


id	name	price	date
0	1		100	2020-11-01
1	2	b	110	2020-11-02
2	3	c	120	2020-11-03
3	4	b	130	2020-11-04
4	5		140	2020-11-05
5	7	d	160	2020-11-07
6	8	b	170	2020-11-08


レコードそのものが欠けているものです。さっきと違い、よくみてみると6番目が消えています。これの何が面倒かと言うと、コンピューターが抜けていると教えてくないところです。現に、idでは6が抜けていますが、一番左のコンピューターが一恵あげているところでは抜けていません。

対処法

 ひとまずの対処としては、日付でカウント欠けてみる、と言うのがあげられます。もうちょっと具体的には

1date_diff(max(date),min(date),day)+1で、そもそも日付が何日あるか計算する


2count(distinct(date))で実際のレコードの日付の数を数えあげる


です。上の例だと、

1は(11月8日−11月1日+1)で8


2は7

なので、ここで食い違います。


限界

 とはいえ、これだと「データが同じ日付ならどうする?」などに答えられません。なんか良い方法あればコメントお願いします!


参考

Python実践データ分析100本ノック

Python実践データ分析100本ノック