データベースを使ったデータ分析はNull(ヌル)に気を付ける | データ分析のお作法

AUTHOR :   ギックス

本記事は、株式会社ギックスの運営していた分析情報サイト graffe/グラーフ より移設されました(2019/7/1)

データベース初心者が躓くNullの癖をしっかり理解しよう

Excelなどを使ったデータ分析では、画面で表示されたままの文字情報でフィルタリング処理、集計処理を行うことができます。しかし、DBには「Null(ヌル)」という特殊な値があります。この「Null」は目で確認することが難しく、また、他のデータ値とは取扱い方が異なるため、DB初心者がミスりやすい値です。今回は、「Null」の取扱い方法についてDBに的を絞って説明します。

DBのNullとは、なにも登録していない真っ白な状態

まず始めにDBのNullとは情報量が全くない値であることを認識する必要があります。
Excelなどの表計算ソフトでは、表の各セル(ます)に情報として数字や文字などの情報を文字列として入力します。そして、情報がないセルには何も入力しないため「0桁の文字列(俗称)」が入っています。しかし、DBでは「0桁の文字列」は「何も入力していない」意味ではなく「0桁の文字列」という情報として扱います。そして「何も入力していない」という意味は、「Null」という特殊な値で表現されます。
そのため、何も登録していないDBのテーブルのデータ項目には、初期値として「Null」が設定され、他の登録された値と分けて処理されます。これが、DB初心者がミスりやすい原因となっています。

DBのNullは選択、集計の対象にならない

DBのテーブルのデータ項目にNullが設定されている場合、SQL命令による選択(where)、集計(sum、max、min、count)の対象外になります。
選択処理では、SQL命令で「データ項目 = null」としてもNullを含んだデータ(レコード)抽出は行えません。「データ項目 is null」という特殊な選択条件で抽出する必要があります。また、不一致条件を行った場合もNullは対象になりません。例えば「null、111、112、113」の4種類のデータが入ったデータ項目に対し、SQL命令で「データ項目 <> 111」を実行した場合、「112、113」の2種類しか該当しません。
集計処理では、SQL命令の合計(sum)、最大(max)、最小(min)、件数(count)などの対象になりません。そもそも、合計や最大、最小は、値の比較や集計のため、Nullが対象外になった所でさして問題はないと思います。しかし、件数については、Nullを意識しないと大変なことになります。例えば100件のデータが登録されているテーブルに対して、SQL命令で「count(データ項目)」を実行した場合、1件のデータ項目にNullが設定されていると実行結果が99件になってしまいます。

Nullが扱いにくいなら別の情報に置換すれば良い

この様にDBのNullは非常に扱いにくく、見た目上「0桁の文字列」とNullの見分けが困難であるため、DB初心者がミスを犯しやすいポイントになっています。このようなミスを少なくするために、チェックリストなどで注意喚起を徹底する事も重要ですが、可能ならDBのテーブル内のNullを別の情報に置換することも手段の1つです。例えばデータ型が文字列型ならNullを「0桁の文字列」に、数値型ならNullを「0」などに置換します。そうする事でNullが設定されていたデータ項目もNullの特殊な動作を意識することなく、普通の値と同様に扱えます。
「Nullを他の値に変えてしまったら情報がなくなるのでは?」と懸念する方もいると思います。しかし、データ分析において、分析結果が変わらなければ問題ありません。様々なアプローチでSQL命令を実行するデータ分析にとって、データを分析に最適な形に変え、ストレスなく、かつスピーディにSQL命令を実行できるデータこそが重要になのです。

連載/関連記事リスト:データ分析のお作法
SERVICE